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代碼中是否有錯誤?
隨着這一變化(以及將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
您使用的是GF4嗎?如果是這樣,我強烈建議更新javax.faces jar包,最新的jar包中有很多bug。你是否也在命名空間和設置方面遵循上面的例子? –
將javax.faces更新爲2.2.4修復了它,非常感謝提示 – mjn