首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >valueChangeListener从未调用过

valueChangeListener从未调用过
EN

Stack Overflow用户
提问于 2011-11-22 00:24:53
回答 2查看 8.8K关注 0票数 2

我有以下几段代码:

代码语言:javascript
复制
 <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方法:

代码语言:javascript
复制
    public void PermissionChanged(ValueChangeEvent event) {
    System.out.println("test");
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-22 00:43:44

有三个问题:

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

替换

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

通过

支持bean中的valueChangeListener="#{userTypeController.permissionChanged}"

  • Your方法签名错误。它应该符合Java naming conventions

替换

公共空事件(ValueChangeEvent PermissionChanged){

通过

public void permissionChanged(ValueChangeEvent PermissionChanged){

  • 您似乎期望它在您单击复选框时立即触发(否则您将看到一个ELException)。这种期望是不正确的。它只会在您提交表单时触发。使用onclick="submit()"是解决此问题的常见方法。

也就是说,可能有更好的方法来解决这一问题。由于功能需求不明确,因此无法提出正确的解决方案。我认为,如果您想要的是即时和异步的反馈和重新呈现,那么<f:ajax>就是您正在寻找的东西。尽管您的问题中缺少JSF2.0标记,但根据您的问题历史记录,您使用的是JSF2.0,因此<f:ajax>应该适用于您。

票数 11
EN

Stack Overflow用户

发布于 2011-11-22 00:33:31

如果使用JSF1.2,则不能将参数传递给listener。您可以使用:

代码语言:javascript
复制
"#{userTypeController.permissionChanged}" 

阅读here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8215008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档