Jsf 当单击commandbutton时,如何调用托管bean中的方法以在onclick事件触发之前设置字符串?

Jsf 当单击commandbutton时,如何调用托管bean中的方法以在onclick事件触发之前设置字符串?,jsf,primefaces,Jsf,Primefaces,单击commandbutton时,如何调用托管bean中的方法来在onclick事件触发之前设置字符串?无论我尝试什么,该方法都是在表单刷新时调用的,而不是在单击按钮时调用的。我需要方法中的信息集在selectColorDlgWidget.show()调用的对话框中可用 以下是primefaces xhtml coede剪报: <p:commandButton value="Edit" id="editColorButton" onclick="#{chapUserPrefMB.setPr

单击commandbutton时,如何调用托管bean中的方法来在onclick事件触发之前设置字符串?无论我尝试什么,该方法都是在表单刷新时调用的,而不是在单击按钮时调用的。我需要方法中的信息集在selectColorDlgWidget.show()调用的对话框中可用

以下是primefaces xhtml coede剪报:

<p:commandButton value="Edit" id="editColorButton" onclick="#{chapUserPrefMB.setPrefTmpKey('CHAP_ColorOneOrMoreCls')}"/>

我做错了什么?

你犯了一个概念上的错误。在JSF生成HTML输出的过程中,属性中的任何EL表达式都会调用值表达式,如
onclick
属性,因此在
onclick
属性的特定情况下,在单击生成的HTML DOM元素时不会调用(相反,它将执行已存在于生成的HTML输出中的JavaScript代码片段)。如果要在操作事件期间调用支持bean方法,则应使用
action
属性。它采用方法表达式而不是值表达式

<p:commandButton value="Edit" id="editColorButton"
    action="#{chapUserPrefMB.setPrefTmpKey('CHAP_ColorOneOrMoreCls')}" />
然后,要在操作完成时打开对话框,只需使用
oncomplete
属性:

<p:commandButton value="Edit" id="editColorButton"
    action="#{chapUserPrefMB.setPrefTmpKey('CHAP_ColorOneOrMoreCls')}"
    oncomplete="selectColorDlgWidget.show()" />

您犯了一个概念上的错误。属性中的任何EL表达式都会在JSF生成HTML输出时调用值表达式,如
onclick
属性,因此在
onclick
属性的特定情况下,不会在单击生成的HTML DOM元素时调用(相反,它将执行已存在于生成的HTML输出中的JavaScript代码片段)。如果要在操作事件期间调用支持bean方法,则应使用
action
属性。它采用方法表达式而不是值表达式

<p:commandButton value="Edit" id="editColorButton"
    action="#{chapUserPrefMB.setPrefTmpKey('CHAP_ColorOneOrMoreCls')}" />
然后,要在操作完成时打开对话框,只需使用
oncomplete
属性:

<p:commandButton value="Edit" id="editColorButton"
    action="#{chapUserPrefMB.setPrefTmpKey('CHAP_ColorOneOrMoreCls')}"
    oncomplete="selectColorDlgWidget.show()" />


您是在寻找ajax行为还是页面重新加载?如果我没有弄错您的问题,那么您希望运行客户端脚本,但要运行的客户端脚本类型由服务器端决定,但是,您希望在使用onClick做出决定之前,在onClick做出决定之后做出决定??伙计,认真的设计你在寻找ajax行为或页面重新加载吗?如果我没有弄错你的问题,你想运行客户端脚本,但是要运行的客户端脚本的类型是由服务器端决定的,但是,你想在onClick之前做出决定,在onClick被用来做出决定之后??伙计,这里有一个严重的设计漏洞