【问题标题】:valueChangeListener never calledvalueChangeListener 从未调用过
【发布时间】:2012-01-03 03:22:29
【问题描述】:

我有以下代码:

 <h:panelGroup rendered="#{userTypeController.permissionItemsUserType.contains(item)}">
                    <h:selectBooleanCheckbox valueChangeListener="#{userTypeController.permissionChanged(this)}" value="#{true}"/> 
                    <h:outputText value="#{item.getAction()}" />
                </h:panelGroup>
                <h:panelGroup rendered="#{!userTypeController.permissionItemsUserType.contains(item)}">
                    <h:selectBooleanCheckbox value="#{false}"/> 
                    <h:outputText value="#{item.getAction()}" />
                </h:panelGroup>

但由于某种原因,permissionChanged 方法从未被调用。对可能出了什么问题有任何想法吗?

我的permissionChanged方法:

    public void PermissionChanged(ValueChangeEvent event) {
    System.out.println("test");
}

【问题讨论】:

    标签: java jsf valuechangelistener


    【解决方案1】:

    存在三个问题:

    1. 您在 EL 中的侦听器方法调用错误。您不应该将当前组件传递给它。

      替换

      valueChangeListener="#{userTypeController.permissionChanged(this)}"
      

      通过

      valueChangeListener="#{userTypeController.permissionChanged}"
      
    2. 您在支持 bean 中的方法签名是错误的。它应该符合Java naming conventions

      替换

      public void PermissionChanged(ValueChangeEvent event) {
      

      通过

      public void permissionChanged(ValueChangeEvent event) {
      
    3. 您似乎希望单击复选框时它会立即触发(否则您会看到ELException)。这种期望是不正确的。它只会在您提交表单时被触发。使用onclick="submit()" 是解决此问题的常见技巧/解决方法。

    也就是说,可能有更好的方法。由于功能需求不明确,因此无法提出正确的解决方案。我认为 &lt;f:ajax&gt; 是您正在寻找的,如果您想要的只是即时和异步反馈并重新渲染。尽管您的问题中缺少 JSF 2.0 标记,但根据您的问题历史记录,您使用的是 JSF 2.0,因此 &lt;f:ajax&gt; 应该适合您。

    【讨论】:

      【解决方案2】:

      如果您使用 JSF 1.2,则无法将参数传递给侦听器。你使用:

      "#{userTypeController.permissionChanged}" 
      

      阅读here

      【讨论】:

      • 传递方法参数不是 JSF 特有的,而是 EL 特有的。如果 OP 没有使用 EL 2.2 或 JBoss EL,它肯定会抛出 ELException
      猜你喜欢
      • 2015-04-08
      • 1970-01-01
      • 2012-02-17
      • 2011-08-14
      • 2016-05-21
      • 1970-01-01
      • 2012-01-03
      • 2013-05-02
      • 2013-06-14
      相关资源
      最近更新 更多