我正在开发一个我需要动态生成表单的项目。用户选择他想要放在屏幕上的组件,程序将其添加到表单中。为此,我使用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。
答案 0 :(得分:0)
另一方面,JSF的生命周期要复杂得多。有些简化,创建了JSF组件,要求他们处理输入(如果有的话),然后要求自己渲染。为了使JSF运行良好,这三件事必须以明确定义的顺序单独发生,但是当JSF与JSP一起使用时,它们不会。相反,组件创建和呈现并行发生,导致各种问题。 JSP和JSF组件都为响应添加内容这一事实是导致很多悲痛的另一个原因。除非您了解这两种技术如何写入响应之间的区别,否则您会遇到很多惊喜,例如内容出现乱序或根本不出现。 - 正如所讨论的here
因此,一起使用JSF和JSP会给你带来不可预测的结果。如上所述,最好使用XSLT采用纯JSF方法