2010-10-08 54 views
1

我正在處理一個需要動態生成表單的項目。用戶選擇他想要放在屏幕上的組件,程序將其添加到窗體中。爲此,我使用XML來定義表單的當前狀態,並且乍一看我認爲使用XSLT進行JSF轉換,但現在我正在評估JSTL。 關於最後一個,我有一個問題。在JSF中解析JSTL XML

假設我有這樣的XML文件(有兩個inputTexts問卷):

<questionnaire> 
    <component name='input'> 
     <id>input1</id> 
    </component> 
    <component name='input'> 
     <id>input2</id> 
    </component> 
</questionnaire> 

這JSTL文件:

<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %> 
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> 
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> 

<x:parse var="doc" xml="${questionarioXSLBean.xml}"/> 

<x:forEach var="n" select="$doc/questionario/componente"> 
<x:if select="$n/@nome = 'input'"> 
    <x:set var="id" select="$n/id" /> 
    <h:inputText id="#{id}"/> 
</x:if> 
</x:forEach> 

的問題是在這條線:<h:inputText id="#{id}"/> 「事業#{id}沒有按不會返回任何東西(我想使用xml文件中的值並在id變量中賦值)。

任何人都可以幫助我嗎? 在此先感謝! P.S.

回答

0

另一方面,JSF的生命週期複雜得多。有點簡化,創建JSF組件,要求處理它們的輸入(如果有的話),然後要求呈現它們自己。爲了JSF能夠很好地工作,這三件事情必須按照明確定義的順序單獨發生,但是當JSF與JSP一起使用時,它們不會。相反,組件創建和渲染並行發生,導致各種問題。 JSP和JSF組件將內容添加到響應的事實是造成很多悲傷的另一個原因。除非您瞭解這兩種技術如何寫入響應之間的差異,否則您會遇到很多驚喜,例如內容出現亂序或根本不出現。 - 正如所討論的here

因此,一起使用JSF和JSP會給你帶來不可預測的結果。如上所述,您最好採用使用XSLT的純JSF方法

+0

感謝Gaurav。關於XSLT,我遇到了一個問題,我無法找到解決方案。也許你能以某種方式幫助我。問題在於,在轉換之後,生成的組件標籤總是在其中包含一個名稱空間定義,這樣JSF就無法識別組件編碼。例如,生成而不是生成。有沒有壓制它的方法? – 2010-10-13 10:06:34

+0

這需要查看您用於生成JSF的工具/代碼。從頭腦裏想不出什麼 – 2010-10-13 20:02:43