【问题标题】:Custom getEntityNameSelectList() fails自定义 getEntityNameSelectList() 失败
【发布时间】:2009-06-27 13:08:38
【问题描述】:

编写一个简单的 JSF 应用程序我遇到了以下问题: 我的 entity.controller.EntityNameManager 类包含一个 getEntityNameSelectList() 方法,我可以使用它来填充 ComboBox。这有效并显示了所有实体,因为检索实体的方法没有 where 子句。 此方法是自动创建的。

现在我想要第二个类似的方法,它根据 sessionscope 中的变量过滤选项。为此,我复制了原始方法,将其重命名为 getEntityNameSelectListByUser(User theUser),并将查询数据库的方法更改为确实按 UserId 过滤的方法。

但是,当尝试在浏览器中加载页面时,我收到一条错误消息,指出控制器类没有“EntityNameSelectListByUser”属性。我假设由于我的新方法需要一个参数,所以找不到它。有没有办法让它知道 Parameter 或 Sessionscope userid?

【问题讨论】:

    标签: jsf websphere rad


    【解决方案1】:

    EL 中的参数支持计划在JSR 245 的下一个维护版本中进行(公告here;实施here)。


    假设您不想等待 JEE6,您有几种方法可以克服这个限制。这些方法是根据 POJO 托管 bean 定义的,因此请酌情将它们调整为您的 EJB。

    1.

    在后台 bean 中进行会话查找和函数调用:

      public String getFoo() {
        FacesContext context = FacesContext
            .getCurrentInstance();
        ExternalContext ext = context.getExternalContext();
        String bar = (String) ext.getSessionMap().get("bar");
        return getFoo(bar);
      }
    

    示例绑定:

    #{paramBean.foo}
    

    2.

    使用EL function(在 TLD 中定义,映射到公共静态方法):

      public static String getFoo(ParamBean bean, String bar) {
        return bean.getFoo(bar);
      }
    

    示例绑定:

    #{baz:getFoo(paramBean, bar)}
    

    3.

    颠覆 Map 类来调用函数(有点hack,仅限于一个参数):

      public Map<String, String> getFooMap() {
        return new HashMap<String, String>() {
          @Override
          public String get(Object key) {
            return getFoo((String) key);
          }
        };
      }
    

    示例绑定:

    #{paramBean.fooMap[bar]}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多