2011-04-14 48 views
2

Bean方法調用我不能讓方法調用與參數在工作JSF 2.0(MyFaces的)和Tomcat 6JSF:與參數

這是我嘗試:

<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)}一起工作!

回答

5

我無法定義像這樣的方法,對不對?

getSomeList(int a) 

爲什麼不呢?

因爲您使用的是不支持EL 2.2的舊Tomcat 6,因此引入了此功能。

而這就是我得到:

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)}" ... /> 

另一種方法是通過Map更換List,它可以是一個自定義實現這確實對get()方法(懶惰)加載。

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

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

謝謝!但它使用#{bla.getSomeList(0)}而不是#{bla.someList(0)} – geeehhdaa 2011-04-15 16:24:21

+0

這是一個複製錯誤,我解決了它。 – BalusC 2011-04-15 16:26:20

0

使用

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

這適用於JSF的一些實現嘗試。

+0

這不是JSF具體。這是EL特定的。 – BalusC 2011-04-14 16:48:01

+0

是的你是對的。但我知道這在某些情況下是可能的:) – aseychell 2011-04-14 16:56:42