组织表单时遇到问题。当我创建一个表单时,一些按钮(或任何其他组件进行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>
我没有嵌套表格。我一直在努力解决这个问题。我不明白这种行为,我不想将按钮和组件分成更多的形式,因为它们应该在概念上在一起。有解决方案吗?
答案 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}" />
我希望它有所帮助。