带参数的Bean方法调用



我无法让带有参数的方法调用在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)}!

我不能这样定义方法,对吧?

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实现替换为支持参数化方法调用的容器。有关详细信息,请参阅此回答。完成后,可以使用

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

另一种选择是用Map代替List,这可以是一个自定义实现,在get()方法上(惰性)加载。

public Map<String, List<Something>> getSomeMap() {
    return someCustomLazyLoadingMap;
}

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

尝试使用

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

这适用于JSF的某些实现。

相关内容

  • 没有找到相关文章

最新更新