2

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

<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

4

1 回答 1

6

嵌套<form>元素在 HTML 中是非法的。由于 JSF 只是一个 HTML 代码生成器,因此您不能在这里用 JSF 做任何魔术。

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

于 2012-10-18T11:19:11.013 回答