JSF:带参数的Bean方法调用

时间:2011-04-14 16:33:59

标签: jsf parameters el javabeans

我无法使用参数进行方法调用以在JSF 2.0(MyFaces)和Tomcat 6中工作。

这是我尝试的方式:

<f:selectItems var="item" value="#{bla.someList} itemValue="#{item.value1}" itemLabel="#{item.value2}"> <f:param name="param1" value="0" /> </f:selectItems>

我无法定义这样的方法,对吗?为什么不呢?

getSomeList(int a)

所以这就是我的尝试:

getSomeList() {
Integer a = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("param1")); 
return doSomething(a);
}

这就是我得到的:

java.lang.NumberFormatException: null
java.lang.Integer.parseInt(Integer.java:417)

如果有人帮助我,我将非常感激。谢谢!

更新:啊,它适用于#{bla.getSomeList(0)}!

2 个答案:

答案 0 :(得分:5)

  

我无法定义这样的方法,对吗?

getSomeList(int a)

没有

  

为什么不呢?

因为您使用的旧Tomcat 6不支持引入此功能的EL 2.2。

  

这就是我得到的:

java.lang.NumberFormatException: null
java.lang.Integer.parseInt(Integer.java:417)

因为它是null<f:param>仅适用于链接/按钮,而不适用于普通组件。

为了使EL中的方法调用起作用,您需要升级到支持Servlet 3.0 / EL 2.2的容器(如Tomcat 7),或者将Tomcat 6的默认EL 2.1实现替换为支持参数化方法调用的容器。有关详细信息,请参阅this answer。完成后,您可以使用

<f:selectItems value="#{bla.getSomeList(0)}" ... />

另一种方法是将List替换为Mapget()可以是public Map<String, List<Something>> getSomeMap() { return someCustomLazyLoadingMap; } 方法(懒惰)加载的自定义实现。

<f:selectItems value="#{bla.someMap.keyName}" ... />

{{1}}

答案 1 :(得分:0)

尝试使用

<f:selectItems var="item" value="#{bla.someList(0)} itemValue="#{item.value1}" itemLabel="#{item.value2}"/>

这适用于JSF的一些实现。