<a4j:commandlink>动作未在<form> </form> </a4j:commandlink>中触发

时间:2013-05-30 06:16:10

标签: jsf-2 xhtml richfaces ajax4jsf

我正在开发一个增强项目。有一个父<form>元素。我在此父表单中包含一个XHTML文件。包含的XHTML文件具有<a4j:commandLink>。此操作未被调用。 现在,如果我将<a4j:commandLink>包裹在<h:form>内,这将有效。这样,调用父表单的操作以及<a4j:commandLink>的操作。但不鼓励嵌套表格。 我无法使用父窗体的操作,因为它转到servlet并且我的操作位于 请求scoped bean。我无法访问servlet中的bean。 任何有关如何在没有<h:form>的情况下进行操作调用的帮助都非常感谢。 这是它的样子:

    <form id="parentFormId" name="parentFormId" action="aservletaction">
      <a4j:outputPanel id="includedRegion">

        <ui:include src="setupView.xhtml"></ui:include>
     </a4j:outputPanel>
   </form>

setupView.xhtml的内容:

<ui:composition>
   <a4j:outputPanel>
        <h:form>
        <a4j:commandLink action="#{myBean.actionMethod}"
          render="adatatableid" limitRender="true"/>
        </h:form>
</ui:composition>

2 个答案:

答案 0 :(得分:2)

RichFaces组件必须位于表单内,否则它们将无法工作(至少是可执行的组件)。

现在,执行整个表单的<a4j:commandLink>(和commandButton)是默认行为,要使用execute attribute更改它:

<a4j:commandLink execute="@this" … >

这会将执行仅限于链接。

答案 1 :(得分:1)

它应该不起作用。 不要嵌套表单,因为它在HTML中一般不合法,特别是在JSF 呈现的HTML代码中。所以,你的代码中有一个以下构造:

<form>
    ...
    <h:form>
        ...
    </h:form>
    ...
</form>

摆脱它是否会按预期工作,即通过创建一个简单的表单到表单结构。