单击命令按钮时如何在onclick事件触发之前调用托管bean中的方法来设置字符串?

时间:2013-09-13 23:18:21

标签: jsf primefaces

单击命令按钮时,如何在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();";
}

我做错了什么?

1 个答案:

答案 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()" />