我正在编写一个像复杂输入文本一样的复合组件,它需要一个完整的表单(它将显示一个搜索表单,一个结果列表供用户选择其中一个)。
<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>
逻辑上,我想使用其他形式,但是当我这样做时我遇到了问题。 e.g。
<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
答案 0 :(得分:5)
在HTML中嵌套<form>
元素为illegal。由于JSF只是一个HTML代码生成器,所以你不能在这里使用JSF做任何魔术。
在JSF中只是不嵌套<h:form>
组件。从复合中删除<h:form>
并查找处理“子表单”的其他方法。