我正在编写一个复合组件,如复杂的输入文本,它需要一个完整的表单(它将显示一个搜索表单和一个结果列表,供用户选择其中一个)。
<composite:implementation>
<div id="#{cc.clientId}" class="#{cc.attrs.styleClass}">
<h:inputText id="txtIdentificador" ...>
<h:graphicImage id="imgIdentificador" ...>
<h:inputText id="txtDescripcion" ...>
<h:form id="formF2ItemWidget">
...
</h:form>
</div>
</composite:implementation>
从逻辑上讲,我想使用其他形式,但是在使用时遇到了问题。例如
<h:form id="formOuter" >
<h:outputLabel value="Texto1" />
<trkal:itemwidget id="txtTexto1">
...
</h:form>
生成的HTML没有内部表单(formF2ItemWidget),只有id=formOuter的表单。但在下面的例子中:
<h:form id="formOuter" >
<h:outputLabel value="Texto1" />
<trkal:itemwidget id="txtTexto1">
<h:outputLabel value="Texto2" />
<trkal:itemwidget id="txtTexto2">
...
</h:form>
txtTexto1 的表单不存在,但 txtTexto2 的表单存在。为什么?
如何编写包含表单的复合组件而不会出现此问题?
我正在使用 mojarra 2.1.7、Java 6.0 和 Tomcat 7.0
最佳答案
嵌套 <form>
元素是illegal在 HTML 中。由于 JSF 只是一个 HTML 代码生成器,因此您不能在这里对 JSF 施展任何魔法。
只是不要嵌套<h:form>
JSF 中的组件也是如此。删除 <h:form>
从组合中寻找替代方法来处理“子表单”。
关于jsf - 包含表单的复合组件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12952404/