【问题标题】:When a commandbutton is clicked How do I call a method in the managed bean to set a String before the onclick event fires?单击命令按钮时如何在 onclick 事件触发之前调用托管 bean 中的方法来设置字符串?
【发布时间】:2013-09-13 23:18:20
【问题描述】:

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

这是 primefaces 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();";
}

我做错了什么?

【问题讨论】:

  • 您是在寻找 ajax 行为还是页面重新加载?
  • 所以如果我正确理解了你的问题;您想运行客户端脚本,但要运行的客户端脚本的类型由服务器端决定,但是,您希望在 onClick 之前做出决定,在 onClick 之后做出决定??老兄,这里有严重的设计漏洞

标签: jsf primefaces


【解决方案1】:

你犯了一个概念上的错误。在由 JSF 生成 HTML 输出期间调用属性中采用值表达式(如 onclick 属性)的任何 EL 表达式,并且在 onclick 属性的特定情况下,当生成的 HTML DOM 元素时 not被点击(相反,它会执行已经存在于生成的 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()" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 2014-01-19
    • 2015-05-10
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多