2010-01-07 59 views
0

我今天遇到的問題是關於使用JSF處理包含的JSP中的HTML。 因此,情況如下:我使用Websphere v6.1的RAD上的IBM的JSF 1.2我有一個自定義組件(來自公司層)使用選項卡。 而爲了有一個更乾淨的代碼,我只是想在一個分離的JSP,這樣每個標籤的JSF代碼中分離出來,main.jsp中:在JSF子視圖中混合使用HTML和JSF

<customTag:tabComponent> 
<jsp:include page="/jsp/workflow/tab1.jsp"></jsp:include> 
<div align="right"> 
    <customTag:switchToTab title="Next" tabValue="2"></customTag:switchToTab> 
</div> 
</customTag:tabComponent> 

而且我tab1.jsp:

<!-- Taglibs declared here --> 
<f:verbatim> 
<div id="myDivId"> 
    <fieldset> 
     <legend>myLegend</legend> 
     <h:outputText value="#{myBean.someContent}"></h:outputText> 
     <!-- HERE are a lot of JSF components, selectItems, inputText... --> 
    </fieldset> 
</div> 
</f:verbatim> 

因此,JSF組件被處理,但是HTML似乎在JSF生成的HTML之外處理之後出現。類似於

<table> 
    <!-- generated content --> 
</table> 
<div id="myDivId"> 
... 

雖然表格應該在div內。我試着用不同的方式使用<f:verbatim>標籤,唯一的解決方案是用逐字打開和關閉標籤圍繞<div></div>,這是骯髒的,並且使Websphere變得瘋狂。

谷歌沒有找到任何相關的,所以你們是否已經遇到同樣的問題?是否有可能找到一個乾淨的解決方案,還是必須將我所有的代碼包含在同一個JSP中?提前致謝。

回答

2

首先,這被認爲是傳統的JSF 1.0/1.1行爲。 f:verbatim確實需要將模板文本帶入JSF組件樹。但是,自從2006的JSF 1.2的新視圖處理程序自動將f:view中的任何模板文本引入組件樹後,f:verbatim完全是多餘的。因此,你是真的使用JSF 1.2? Websphere 6.1隨附了內置的JSF 1.1庫,升級到1.2並不像將庫放在/WEB-INF/lib中那樣容易。

至於你的實際問題,你只需要包裝模板文本與f:verbatim,不值得JSF組件。因此,以下應該工作:

<f:verbatim> 
    <div id="myDivId"> 
     <fieldset> 
      <legend>myLegend</legend> 
</f:verbatim> 
<h:outputText value="#{myBean.someContent}"></h:outputText> 
<!-- HERE are a lot of JSF components, selectItems, inputText... --> 
<f:verbatim> 
     </fieldset> 
    </div> 
</f:verbatim> 
+0

再次感謝您的時間。 也許這很愚蠢,但是,我怎麼知道JSF版本?我認爲它是1.2,但你應該是對的,因爲公司發佈了整個環境,我沒有改變任何東西,所以我仍然猜測它仍然是JSF 1.1。 關於您的解決方案:我已經嘗試過了,並且在您回答後再次執行了此操作,並且這是第一次啓動Websphere,但在「重新發布」之後,我得到了「重新發布失敗」(不確定確切翻譯,法語RAD環境),因爲

丟失。所以我必須每次重新啓動WS以使其工作。 (BTW令人印象深刻的配置文件!) – Baztoune 2010-01-07 14:37:30

+0

如果您使用的是JSF 1.2,您會在啓動日誌中看到(在1.1中缺少這一點)。此外,您可以使用僅限於1.2的類,如'ValueExpression'或僅限於1.2的方法(如Application#evaluateExpressionGet()),或僅使用1.2的標籤,如'f:setPropertyActionListener'和'h: panelGroup layout =「block」'。至於發佈後的「重新發布失敗」錯誤,我會懷疑髒的類路徑。確保整個類路徑中的庫中沒有版本衝突(不幸的是,Websphere中有很多路徑,我可以從經驗中得知)。 – BalusC 2010-01-07 14:46:22

+0

我在類路徑中找不到任何奇怪的東西,但是我發現的解決方案是「在應用程序包含錯誤時啓用發佈」,因此它在發佈期間不會抱怨「交叉標籤」。輸出仍然是正確的,所以沒關係(如果我找到更多的東西,我會在稍後發佈,以供其他人使用)。謝謝。 – Baztoune 2010-01-07 15:32:24