在JSF中解析JSTL XML

时间:2010-10-08 12:45:19

标签: java xml jsp jsf jstl

我正在开发一个我需要动态生成表单的项目。用户选择他想要放在屏幕上的组件,程序将其添加到表单中。为此,我使用XML来定义表单的当前状态,乍一看,我认为使用XSLT进行转换为JSF,但现在我也在评估JSTL。 关于最后一个,我有一个问题。

假设我有这个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。

1 个答案:

答案 0 :(得分:0)

另一方面,JSF的生命周期要复杂得多。有些简化,创建了JSF组件,要求他们处理输入(如果有的话),然后要求自己渲染。为了使JSF运行良好,这三件事必须以明确定义的顺序单独发生,但是当JSF与JSP一起使用时,它们不会。相反,组件创建和呈现并行发生,导致各种问题。 JSP和JSF组件都为响应添加内容这一事实是导致很多悲痛的另一个原因。除非您了解这两种技术如何写入响应之间的区别,否则您会遇到很多惊喜,例如内容出现乱序或根本不出现。 - 正如所讨论的here

因此,一起使用JSF和JSP会给你带来不可预测的结果。如上所述,最好使用XSLT采用纯JSF方法