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

时间:2012-10-18 10:20:41

标签: 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>

逻辑上,我想使用其他形式,但是当我这样做时我遇到了问题。 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

1 个答案:

答案 0 :(得分:5)

在HTML中嵌套<form>元素为illegal。由于JSF只是一个HTML代码生成器,所以你不能在这里使用JSF做任何魔术。

在JSF中只是嵌套<h:form>组件。从复合中删除<h:form>并查找处理“子表单”的其他方法。