表单中的JSF按钮有时不执行操作

时间:2012-10-10 09:57:58

标签: forms jsf jsf-2 primefaces

组织表单时遇到问题。当我创建一个表单时,一些按钮(或任何其他组件进行ajax调用)不执行操作,但它们确实执行更新。当我将表单分成两个新表单时,按钮开始工作。

在这种情况下,按钮和自动完成功能不起作用。

<h:form styleClass="question-#{cc.attrs.question.id}">
    ...

    <p:commandButton value="add answer" update="@form" action="#{questionEditorBean.addAnswer}" />
    <p:commandButton value="save" update="@(.question-#{cc.attrs.question.id})" action="#{cc.attrs.onSave}" oncomplete="#{cc.attrs.onCancel}" />
    <p:commandButton value="cancel" onclick="#{cc.attrs.onCancel}" />

    <p:autoComplete value="#{questionEditorBean.newTag}" id="tagSelect" completeMethod="#{tagBean.completeTag}" dropdown="true"  
                var="t" itemLabel="#{t.name}" itemValue="#{t}" converter="#{tagConverter}" forceSelection="true">
    <p:ajax event="itemSelect" action="#{action}" update="@form"/>
</p:autoComplete>
</h:form>

当我分割表单时,一切正常。

<h:form styleClass="question-#{cc.attrs.question.id}">
    ...

    <p:commandButton value="add answer" update="@form" action="#{questionEditorBean.addAnswer}" />
    <p:commandButton value="save" update="@(.question-#{cc.attrs.question.id})" action="#{cc.attrs.onSave}" oncomplete="#{cc.attrs.onCancel}" />
    <p:commandButton value="cancel" onclick="#{cc.attrs.onCancel}" />

</h:form>
<h:form>

    <p:autoComplete value="#{questionEditorBean.newTag}" id="tagSelect" completeMethod="#{tagBean.completeTag}" dropdown="true"  
                var="t" itemLabel="#{t.name}" itemValue="#{t}" converter="#{tagConverter}" forceSelection="true">
    <p:ajax event="itemSelect" action="#{action}" update="@form"/>
</p:autoComplete>
</h:form>

我没有嵌套表格。我一直在努力解决这个问题。我不明白这种行为,我不想将按钮和组件分成更多的形式,因为它们应该在概念上在一起。有解决方案吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试为表单添加id并设置prependId="false",如下例所示:

<h:form id="ccForm" prependId="false">

然后将表单ID添加到所有update目标。

<p:ajax event="itemSelect" action="#{action}" update="ccForm:tagSelect" />

通过这种方式,您可以明确复合组件中的update目标。

另外,我注意到您尝试在表单中使用styleClass作为id,并尝试更新它。按照这种方式我建议,使其update属性看起来像这样:

<p:commandButton value="save" update="ccForm:question-#{cc.attrs.question.id}" action="#{cc.attrs.onSave}" oncomplete="#{cc.attrs.onCancel}" />

我希望它有所帮助。