p:commandButton 仅适用于两次点击(JSF 2.2 错误?)
p:commandButton only works with two clicks (JSF 2.2 Bug?)
我正在尝试更新(合并)来自 ListDataModel 的字段,我遇到了我认为是 Jsf (Mojara) 2.2 中的错误。仅当单击两次 PrimeFaces 命令按钮时更新才有效。我在这里阅读了很多帖子并尝试了解决方案,但似乎没有任何效果:
h:commandButton/h:commandLink does not work on first click, works only on second click
commandButton only works on the second click
p:commandButton with p:fileDownload and no ajax only works in second click
榜单来自
<h:form>
<p:dataTable value="#{proDocFolBean.selectedProDocs}" var="docs">
<p:column headerText="Document Name:">
<h:outputText value="#{docs.docName}"/>
</p:column>
<p:column headerText="Description">
<h:outputText value="#{docs.description}"/>
</p:column>
<p:column headerText="Date Created">
<h:outputText value="#{docs.dateCreated}">
<f:convertDateTime pattern="dd-MMM-yyyy" />
</h:outputText>
</p:column>
<p:column headerText="Classification">
<h:outputText value="#{docs.classification}"/>
</p:column>
<p:column>
*** <p:commandLink value="Update" action="#{proDocFolBean.prepareUpdateDoc}"/> ***
</p:column>
<p:column>
<p:commandLink id="downLoadLink" value="Download" ajax="false">
<p:fileDownload value="#{proDocFolBean.downloadFromFolders}"
contentDisposition="attachment"/>
</p:commandLink>
....
</h:form>
单击上面表单中的更新 link 调用 bean 中的 preparedUpdate 方法:
public String prepareUpdateDoc() {
docToUpdate = selectedProDocs.getRowData();
selectedId = docToUpdate.getProjectDocId();
docsFacade.find(selectedId);
return "UpdateProDoc";
}
以上方法填充更新表单:
<h:outputScript name="js/formbugfix.js" target="head" />
<p:inputTextarea rows="30" cols="60" value="#{proDocFolBean.docToUpdate.description}" immediate="true"/>
<p>
<p:commandButton value="Change" action="#{proDocFolBean.updateProjectDoc}">
<!-- <f:ajax execute="@form"/> -->
</p:commandButton>
虽然我意识到PF已经通过嵌入式js固定了视图状态,但我包含了一个js脚本。我认为可能包括 question.
中所述的脚本
可能会解决问题,但会导致相同的行为。
最后,表单在bean中调用以下合并方法:
public String updateProjectDoc() {
docsFacade.update(docToUpdate);
return "ProSysHome";
}
如果我尝试使用 h:commandbutton 或使用 p:commandButton 将 ajax 设置为 false(不使用 js 脚本),表单只会被刷新,更新后的值不会合并到数据库中。如果我单独使用 p:commandButton,我可以让操作正常进行,但只有在单击两次之后。这是非常奇怪的行为,希望得到任何帮助。提前致谢!
好吧,我想我在 Vsevolod 的帮助下解决了这个问题。首先,完全没有必要使用单独的 js 脚本,因为正如 Vsevolod 所说,PF 有自己的修复方法。
单独使用 p:commandButton 我遇到了 javascript 错误
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.
VM94:25 Uncaught TypeError: Cannot read property 'debug' of undefined
似乎这个错误来自于我单击更新 link 以调用 prepareUpdateDoc 方法并填充更新表单时的原始列表表单。在此列上将 ajax 设置为 false 解决了问题:
<p:column>
<p:commandLink value="Update" action="# {proDocFolBean.prepareUpdateDoc}" ajax="false"/>
</p:column>
单击一次后表单现在可以正常工作,但我仍然想知道原因是否是由于两次重复 ajax 调用(一次来自列表表单 p:commandLink,第二次来自 p:commandLink p:commandButton) 的实际更新调用以及为什么在将 ajax 设置为 false 后 js 错误消失?
我遇到了这个问题,但在我的情况下 ajavax.faces.application.ViewExpiredException
这是一篇关于它的好文章 javax.faces.application.ViewExpiredException: View could not be restored
我也有这个“2 click”问题。在我的例子中,解决方案是使用
<p:commandLink value="Update" id="sButton" action="#{myBean.myAction}" update=":myForm"/>
而不是
<p:commandLink value="Update" id="sButton" action="#{myBean.myAction}">
<p:ajax event="click" update=":myForm"/>
</p:commandLink>
我正在尝试更新(合并)来自 ListDataModel 的字段,我遇到了我认为是 Jsf (Mojara) 2.2 中的错误。仅当单击两次 PrimeFaces 命令按钮时更新才有效。我在这里阅读了很多帖子并尝试了解决方案,但似乎没有任何效果:
h:commandButton/h:commandLink does not work on first click, works only on second click
commandButton only works on the second click
p:commandButton with p:fileDownload and no ajax only works in second click
榜单来自
<h:form>
<p:dataTable value="#{proDocFolBean.selectedProDocs}" var="docs">
<p:column headerText="Document Name:">
<h:outputText value="#{docs.docName}"/>
</p:column>
<p:column headerText="Description">
<h:outputText value="#{docs.description}"/>
</p:column>
<p:column headerText="Date Created">
<h:outputText value="#{docs.dateCreated}">
<f:convertDateTime pattern="dd-MMM-yyyy" />
</h:outputText>
</p:column>
<p:column headerText="Classification">
<h:outputText value="#{docs.classification}"/>
</p:column>
<p:column>
*** <p:commandLink value="Update" action="#{proDocFolBean.prepareUpdateDoc}"/> ***
</p:column>
<p:column>
<p:commandLink id="downLoadLink" value="Download" ajax="false">
<p:fileDownload value="#{proDocFolBean.downloadFromFolders}"
contentDisposition="attachment"/>
</p:commandLink>
....
</h:form>
单击上面表单中的更新 link 调用 bean 中的 preparedUpdate 方法:
public String prepareUpdateDoc() {
docToUpdate = selectedProDocs.getRowData();
selectedId = docToUpdate.getProjectDocId();
docsFacade.find(selectedId);
return "UpdateProDoc";
}
以上方法填充更新表单:
<h:outputScript name="js/formbugfix.js" target="head" />
<p:inputTextarea rows="30" cols="60" value="#{proDocFolBean.docToUpdate.description}" immediate="true"/>
<p>
<p:commandButton value="Change" action="#{proDocFolBean.updateProjectDoc}">
<!-- <f:ajax execute="@form"/> -->
</p:commandButton>
虽然我意识到PF已经通过嵌入式js固定了视图状态,但我包含了一个js脚本。我认为可能包括 question.
中所述的脚本可能会解决问题,但会导致相同的行为。
最后,表单在bean中调用以下合并方法:
public String updateProjectDoc() {
docsFacade.update(docToUpdate);
return "ProSysHome";
}
如果我尝试使用 h:commandbutton 或使用 p:commandButton 将 ajax 设置为 false(不使用 js 脚本),表单只会被刷新,更新后的值不会合并到数据库中。如果我单独使用 p:commandButton,我可以让操作正常进行,但只有在单击两次之后。这是非常奇怪的行为,希望得到任何帮助。提前致谢!
好吧,我想我在 Vsevolod 的帮助下解决了这个问题。首先,完全没有必要使用单独的 js 脚本,因为正如 Vsevolod 所说,PF 有自己的修复方法。
单独使用 p:commandButton 我遇到了 javascript 错误
Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check http://xhr.spec.whatwg.org/.
VM94:25 Uncaught TypeError: Cannot read property 'debug' of undefined
似乎这个错误来自于我单击更新 link 以调用 prepareUpdateDoc 方法并填充更新表单时的原始列表表单。在此列上将 ajax 设置为 false 解决了问题:
<p:column>
<p:commandLink value="Update" action="# {proDocFolBean.prepareUpdateDoc}" ajax="false"/>
</p:column>
单击一次后表单现在可以正常工作,但我仍然想知道原因是否是由于两次重复 ajax 调用(一次来自列表表单 p:commandLink,第二次来自 p:commandLink p:commandButton) 的实际更新调用以及为什么在将 ajax 设置为 false 后 js 错误消失?
我遇到了这个问题,但在我的情况下 ajavax.faces.application.ViewExpiredException 这是一篇关于它的好文章 javax.faces.application.ViewExpiredException: View could not be restored
我也有这个“2 click”问题。在我的例子中,解决方案是使用
<p:commandLink value="Update" id="sButton" action="#{myBean.myAction}" update=":myForm"/>
而不是
<p:commandLink value="Update" id="sButton" action="#{myBean.myAction}">
<p:ajax event="click" update=":myForm"/>
</p:commandLink>