1

我有组织表格的问题。当我制作一个表单时,一些按钮(或任何其他进行 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>

我没有嵌套表格。我一直在遇到这个问题。我不理解这种行为,并且我不想将按钮和组件在概念上应该放在一起时拆分为更多形式。有解决办法吗?

4

1 回答 1

0

您可以尝试给出表单 anid和 set prependId="false",如下例所示:

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

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

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

通过这种方式,您可以明确说明update复合组件内的目标是什么。

我还注意到您正在尝试在表单中使用styleClassasid并尝试更新它。按照我建议的这种方式,使其update属性如下所示:

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

我希望它有所帮助。

于 2012-10-10T10:13:45.060 回答