2013-10-24 53 views
1

將項目從JavaServer Faces 2.1/Java EE 5遷移到GlassFish 4上的JavaServer Faces 2.2/Java EE 7 Web配置文件時,我遇到無效的HTML代碼,因爲額外的<html> ... </html>標籤,用於JSF代碼中每個複合組件的實例。JavaServer Faces 2.2複合組件隨附呈現<html> ...</html>標籤

環境:鑽嘴魚科2.2.0(GlassFish的4.0)上,NetBeans 7.3.1,JDK 7

重現步驟:

  • 創建一個新的 「Java EE 7的Web」 項目JavaServer Faces中和選擇JSF 2.2服務器庫
  • index.html中,選擇HTML主體文本(「你好從Facelets的」)和重構爲一個複合部件

實施例的源代碼:

的index.html

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://xmlns.jcp.org/jsf/html" 
     xmlns:ez="http://xmlns.jcp.org/jsf/composite/ezcomp"> 
    <h:head> 
     <title>Facelet Title</title> 
    </h:head> 
    <h:body> 
     <ez:test/> 
    </h:body> 
</html> 

test.xhtml

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:cc="http://xmlns.jcp.org/jsf/composite"> 

    <!-- INTERFACE --> 
    <cc:interface> 
    </cc:interface> 

    <!-- IMPLEMENTATION --> 
    <cc:implementation> 
     Hello from Facelets 
    </cc:implementation> 
</html> 

實際HTML輸出:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"><head id="j_idt2"> 
     <title>Facelet Title</title></head><body><html xmlns="http://www.w3.org/1999/xhtml"> 

    <!-- INTERFACE --> 

    <!-- IMPLEMENTATION --> 
     Hello from Facelets 

</html></body> 
</html> 

這不是有效的HTML作爲有另一種<html> ... </html>存在用於複合部件。我的JSF代碼中是否有錯誤?

回答

1

嘗試使用

<ui:component 
    xmlns="http://www.w3.org/1999/xhtml" 
..... 
> 

在這裏看到一個例子:http://balusc.blogspot.co.uk/2013/01/composite-component-with-multiple-input.html

+0

隨着這一變化(以及將UI命名空間聲明的xmlns':UI =「http://xmlns.jcp.org/jsf/ facelets「),頁面現在呈現一個異常:java.lang.NullPointerException \t at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1144) \t at com.sun.faces.util.Cache。 get(Cache.java:116) \t at com.sun.faces.applicati on.view.FaceletViewHandlingStrategy.getComponentMetadata(FaceletViewHandlingStrategy.java:237)...' – mjn

+0

您使用的是GF4嗎?如果是這樣,我強烈建議更新javax.faces jar包,最新的jar包中有很多bug。你是否也在命名空間和設置方面遵循上面的例子? –

+0

將javax.faces更新爲2.2.4修復了它,非常感謝提示 – mjn