单击命令按钮时,如何在onclick事件触发之前调用托管bean中的方法来设置字符串?无论我尝试什么,都会在表单刷新时调用该方法,而不是在单击按钮时调用。我需要在selectColorDlgWidget.show()调用的对话框中提供方法中设置的信息;
这是主要的xhtml coede snip:
<p:commandButton value="Edit" id="editColorButton" onclick="#{chapUserPrefMB.setPrefTmpKey('CHAP_ColorOneOrMoreCls')}"/>
以下是托管bean的代码:
public String setPrefTmpKey(String tmpKey) {
currentTmpKey = tmpKey.trim();
currentTmpValue = getChapUserPrefString(currentTmpKey);
return "selectColorDlgWidget.show();";
}
我做错了什么?
答案 0 :(得分:6)
你犯了一个概念上的错误。在JSF生成HTML输出期间调用属于值onclick
属性的值的表达式中的任何EL表达式,并且在onclick
属性的特定情况下,因此不时单击生成的HTML DOM元素(相反,它将执行已生成的HTML输出中已存在的JavaScript代码段)。如果要在操作事件期间调用辅助bean方法,则应该使用action
属性。它需要一个方法表达式而不是值表达式。
<p:commandButton value="Edit" id="editColorButton"
action="#{chapUserPrefMB.setPrefTmpKey('CHAP_ColorOneOrMoreCls')}" />
与
public void setPrefTmpKey(String tmpKey) {
currentTmpKey = tmpKey.trim();
currentTmpValue = getChapUserPrefString(currentTmpKey);
}
然后,要在完成操作时打开对话框,只需使用oncomplete
属性:
<p:commandButton value="Edit" id="editColorButton"
action="#{chapUserPrefMB.setPrefTmpKey('CHAP_ColorOneOrMoreCls')}"
oncomplete="selectColorDlgWidget.show()" />