我正在做一个增强项目。有一个父元素<form>
。在这个父表单中包含了一个XHTML文件。所包含的XHTML文件有一个<a4j:commandLink>
。这个动作没有被调用。现在,如果我将<a4j:commandLink>
包裹在<h:form>
中,这将起作用。这样,父表单的操作和<a4j:commandLink>
的操作都被调用。但是不鼓励嵌套表单。我不能使用父表单的操作,因为它会转到servlet,而我的操作在请求作用域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>
RichFaces组件必须在表单内,否则它们将无法工作(至少是可执行的)。
现在,<a4j:commandLink>
(和commandButton)执行整个表单是默认行为,要改变它使用execute
属性:
<a4j:commandLink execute="@this" … >
这将限制仅对链接执行
应该不行。不要嵌套表单,因为它一般在HTML中是不合法的,特别是在JSF呈现的HTML代码中。因此,您的代码中有以下结构:
<form>
...
<h:form>
...
</h:form>
...
</form>
去掉它,它会像预期的那样工作,即通过创建一个普通的form-to-form结构。