【问题标题】:method not getting called on onclick event方法未在 onclick 事件上被调用
【发布时间】:2012-07-17 09:46:56
【问题描述】:

我正在使用 JSF 2.0 创建页面:

<h:selectBooleanCheckbox id="checkbox1" title="Published" 
                         onclick="#{StageGate.setMyCheckboxValue()}" />

我希望在单击复选框时调用setMyCheckboxValue()。但是,setMyCheckboxValue() 在页面加载时被调用一次。

如果我写

<h:selectBooleanCheckbox id="checkbox1" title="Published" 
onclick="#{StageGate.setMyCheckboxValue()}; alert(document.getElementById('checkbox1').checked);" />

每次点击都会收到提醒。

我的问题是:当我收到警报时,为什么 setMyCheckboxValue() 没有在每个 onclick 事件上被调用?

注意:我也尝试过 AJAX,但复选框保持不变。

【问题讨论】:

    标签: html jsf-2 checkbox onclick


    【解决方案1】:

    onclick 属性用于客户端 (javascript) 方法,不会更改服务器端的任何内容。

    如果您想更改服务器端值,您需要 value 属性:

    <h:selectBooleanCheckbox value="#{StageGate.myCheckboxValue}" .../>
    

    请注意,我将您的 setMyCheckboxValue() 更改为 myCheckboxValue,因为 jsf 会自动检测到 setter 方法(如果您使用 getter getFoo() 和 setter setFoo(...) 正确定义变量 foo

    【讨论】:

      【解决方案2】:

      onclick 用于客户端 JavaScript 调用。 我认为您想在单击复选框时调用服务器端的函数。

      代码如下:

      <h:selectBooleanCheckbox id="checkbox1" title="Published"
                               value="#{StageGate.myCheckBox}" >
          <f:ajax event="change" execute="@this"
                  action="#{StageGate.setMyCheckboxValue()}" />
      </h:selectBooleanCheckbox>
      

      我希望这对你有用。

      【讨论】:

      • 当我使用 ajax 时,问题是如果在加载时选中了复选框,那么即使单击后它仍然处于选中状态...
      猜你喜欢
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 2012-08-17
      • 2011-05-13
      • 1970-01-01
      相关资源
      最近更新 更多