2013-01-16 75 views
1

我遇到了我們的應用程序如下問題:應用程序每次重新啓動服務器或重新部署後的第一次嘗試導航到一個特定的頁面將失敗,異常:「沒有標籤」異常時,首先導航到

javax.faces.view.facelets.TagException: /testing/target.xhtml @8,72 <ofc:testComp> Tag Library supports namespace: http://java.sun.com/jsf/composite/of-components, but no tag was defined for name: testComp 

我辛苦了一段時間,將其分解爲最小版本。在這方面,我想通了以下內容:

時出現的問題:

  • 服務器已重新啓動或應用程序通過h:commandLink
  • 調配
  • 一個嘗試導航至某個頁面目標頁面使用複合組件

問題消失時:

  • 以某種其他方式到達目標頁面,例如,通過h:outputLink或通過URL
  • 從此以後目標頁面已成功達到一次

我排除了各種東西(我們是在鑽嘴魚科2.1.7和目標頁面不窩組件,所以它不是這個問題nested namespace declarations),並把範圍縮小到下面的「罪魁禍首」:

源頁面使用的模板,我簡化如下:

<!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:ui="http://java.sun.com/jsf/facelets" 
     xmlns:h="http://java.sun.com/jsf/html"> 
<h:head> 
    <title>Testpage</title>   
</h:head> 

<h:body> 
    <h:form id="form"> 
     <ui:insert name="content"/> 
     <ui:include src="some_other_content.xhtml" /> 
    </h:form> 
</h:body> 
</html> 

如果我刪除了ui:include一切正常。有人可以向我解釋這裏發生了什麼?這似乎與服務器重新啓動後初始化我的組件庫有關,但我不明白模板中的包含如何處理它。據我所知,這是將一些固定內容添加到頁面的標準方式?如果這不是應該如何做,請讓我知道還有其他的方式。

謝謝!



剩餘的代碼片段完整性(沒有魔法在這裏發生):

source_page.xhtml

<ui:composition template="/testing/test_template.xhtml"> 
    <ui:define name="content"> 
     <h:outputLink value="target.xhtml">Outputlink to target</h:outputLink> <br /> 
     <h:commandLink value="Commandlink to target" action="target.xhtml" /> 
    </ui:define> 
</ui:composition> 

target.xhtml

<!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:ofc="http://java.sun.com/jsf/composite/of-components" 
     xmlns:h="http://java.sun.com/jsf/html"> 
    <h:head></h:head> 
    <h:body> 
     <ofc:testComp content="This is a component for testing purposes" /> 
    </h:body> 
</html> 

testComp.xhtml

<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:h="http://java.sun.com/jsf/html" 
     xmlns:cc="http://java.sun.com/jsf/composite"> 

    <cc:interface> 
     <cc:attribute name="content" required="true" /> 
    </cc:interface> 

    <cc:implementation> 
     <h:outputText value="#{cc.attrs.content}" /> 
    </cc:implementation> 
</html> 

最後,some_other_content.xhtml只是一個隨機你好,世界頁。

+0

基本上你是說你的''不起作用,不是嗎?這也是錯誤跟蹤所暗示的。我從來沒有使用過這種組件,但要確保它們位於* webapp/resources/of-components *路徑中。這就是這個相關的鏈接說http://www.mkyong.com/jsf2/composite-components-in-jsf-2-0/ –

+0

基本上,我所說的是組件在幾乎所有情況下工作正常。他們位於正確的位置,無誤地顯示。真正的應用程序已經使用了很多年了。只有這一個導航場景出現問題。 – Louise

+0

排除一個和其他我會給莫哈拉2.1.17一試。 – BalusC

回答

0

花了相當一段時間,但我們終於設法升級。我們現在正在運行Mojarra 2.1.21。

我重新啓用了包含,並嘗試盡我所能恢復原始設置。我沒有得到任何錯誤。代碼也在其他地方發生了變化,所以我不能絕對肯定地說這是它工作的唯一原因。然而,原來的問題是相當可重複的,一般的設置基本上與以前一樣,所以我很確定其中一個跳過Mojarra版本的伎倆。