Forms 表单中的JSF按钮有时不';不采取行动
我在组织表格方面有问题。当我制作一个表单时,一些按钮(或进行ajax调用的任何其他组件)不执行操作,但它们执行更新。当我将表单拆分为两个新表单时,按钮开始工作 在这种情况下,按钮和自动完成不起作用Forms 表单中的JSF按钮有时不';不采取行动,forms,jsf,jsf-2,primefaces,Forms,Jsf,Jsf 2,Primefaces,我在组织表格方面有问题。当我制作一个表单时,一些按钮(或进行ajax调用的任何其他组件)不执行操作,但它们执行更新。当我将表单拆分为两个新表单时,按钮开始工作 在这种情况下,按钮和自动完成不起作用 <h:form styleClass="question-#{cc.attrs.question.id}"> ... <p:commandButton value="add answer" update="@form" action="#{questionEdito
<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>
...
我没有嵌套表单。我一直在努力解决这个问题。我不理解这种行为,我不想把按钮和组件分割成更多的形式,因为它们应该在概念上结合在一起。有解决方案吗?您可以尝试为表单提供一个
id
并设置prependId=“false”
,如本例所示:
<h:form id="ccForm" prependId="false">
通过这种方式,您可以明确复合组件中的update
目标是什么
我还注意到,您试图在表单中使用styleClass
作为id
,并试图对其进行更新。按照我建议的方法,将其update
属性如下所示:
<p:commandButton value="save" update="ccForm:question-#{cc.attrs.question.id}" action="#{cc.attrs.onSave}" oncomplete="#{cc.attrs.onCancel}" />
我希望它能有所帮助。我使用styleClass是因为我希望页面上所有包含此类的组件都能更新。我会使用name属性,但JSF不允许。那么,在没有任何警告的情况下不在服务器上调用该操作,而是更新更新中的元素,这是正常行为吗?我希望能找到一些解决方案,使它能够与一个表单一起工作。
cc.attrs.onCancel
是bean中的方法还是表示客户端js函数的文本?它是JavaScript。关闭对话框。你的什么动作在单一形式下不起作用?在第二个例子中,所有动作都起作用。在第一种情况下,按钮不调用服务器上的操作,而是调用update和oncomplete。这是非常奇怪的,因为唯一的区别是分离成两种形式。在第二个例子中,一切都有效。在第一种情况下,按钮不调用服务器上的操作,而是调用update和oncomplete。这很奇怪,因为唯一的区别是分离成两种形式。在第一种情况下,当我删除自动完成时,按钮开始工作。我在很多地方都遇到了这个问题,不仅是按钮和自动完成,而且只有按钮。
<p:commandButton value="save" update="ccForm:question-#{cc.attrs.question.id}" action="#{cc.attrs.onSave}" oncomplete="#{cc.attrs.onCancel}" />