自定义getEntityNameSelectList()失败

时间:2009-06-27 13:08:39

标签: jsf websphere rad

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

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

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

1 个答案:

答案 0 :(得分:0)

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类来调用函数(有点破解并限制为一个参数):

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

示例绑定:

#{paramBean.fooMap[bar]}