包含表单的复合组件的问题

Jox*_*eja 2 jsf jsf-2 mojarra

我正在编写一个复合组件,如复杂的输入文本,它需要一个完整的表单(它将显示一个搜索表单,一个结果列表供用户选择其中一个).

<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>
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,我想用其他形式,但是当我这样做时我会遇到问题.例如

<h:form id="formOuter" >
    <h:outputLabel value="Texto1" />
    <trkal:itemwidget id="txtTexto1">
    ...
</h:form>
Run Code Online (Sandbox Code Playgroud)

生成的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>
Run Code Online (Sandbox Code Playgroud)

txtTexto1的表单不存在,但txtTexto2的表单存在.为什么?

如何编写包含没有此问题的表单的复合组件?

我使用的是mojarra 2.1.7,Java 6.0和Tomcat 7.0

Bal*_*usC 5

嵌套<form>元素在HTML中是非法的.由于JSF只是一个HTML代码生成器,因此您无法在这里使用JSF.

只是不要<h:form>在JSF中嵌套组件.<h:form>从复合材料中删除它,并寻找处理"子表单"的替代方法.