2012-07-02 47 views
1

我使用JSF 2.0 primefaces對JBoss 7.在代碼的某些部分,我有以下:EL表達解析整數只要

public void setItemValue(int value) { 
    this.value = value; 
} 

並在XHTML:

<p:commandButton ajax="true" value="Button" update="@form" 
action="#{bean.setItemValue(1)}"/> 

問題是,當我點擊按鈕,我得到一個javax.el.MethodNotFoundException,說setItemValue(java.lang.Long)不存在。當然它不是,它應該是一個整數或整數值!任何人都看到了這個問題?除了改變我的方法以獲得長時間之外,還有其他的選擇嗎?謝謝!

編輯:剛剛下載了JBoss 7.2的SNAPSHOT,並且它可以正常工作。看起來像它的JBoss 7.1.1 :(的一個錯誤

+1

嘗試使用f:setPropertyActionListener或#{bean.setItemValue('1')} –

+0

第二次嘗試:找不到方法:bean.setItemValue(java.lang.String)'。但第一次嘗試工作!不好的部分是我仍然無法通過jsf將'Integer'或'int'傳遞給方法,但這是一個很好的解決方法:) – Montolide

+0

與Tomcat 7.0.26相同。切換到Tomcat 7.0.28爲我解決了它。我認爲EL中的文字確實是Long,但我喜歡Integer的方法在Tomcat 7.0.28中找到匹配的事實。 –

回答

1

採取行動的方法表達型是

字符串動作()

因此,使用

public String setItemValue(Integer value) { 
    this.value = value; 
    return null; 
} 

參見:

UPDATE 您需要聲明Servlet版本爲3.0才能充分利用EL 2.2,例如傳遞參數。對於在web.xml改變你的web-app元素這樣的:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" 
version="3.0"> 
+0

'return null;'? – Lion

+0

如果你返回null,那麼當前頁面將被重新加載。如果你有一個,那麼只需返回一個結果視圖。 – Ravi

+0

感謝您對操作方法簽名的解釋!不幸的是,錯誤仍然存​​在:('Method not found:bean.setItemValue(java.lang.Long)' – Montolide

1

不要在任何bean方法(它的一個非常糟糕的做法)使用getset前綴,action屬性需要一個方法的名稱,而比一些getter或setter

getset僅用於bean的變量

的getter和setter更好的東西取代你setItemValueassignItemValue

這樣的:

<p:commandButton ajax="true" value="Button" update="@form" 
    action="#{bean.assignItemValue(1)}"/> 

其中

public void assignItemValue(Long value) { //you could also try with int value... 
    //set the value to whenever you want too... 
} 
+0

同樣的錯誤: 'Method not found:bean.assignItemValue(java.lang.Long)' – Montolide

+1

爲什麼你不改變方法參數到Long? –

+0

爲什麼我應該被迫使用Long,因爲Java的默認值是Integer? – Montolide

2

它看起來有點怪,但你可以叫上長物體自身的方法的intValue內EL 2.2

<p:commandButton ... action="#{bean.setItemValue((1).intValue())}"/> 
+0

Property'在類型java.lang.Long中找不到intValue – jmlv21104

+0

您是否將括號添加到intValue中?#{bean.myLongValue.intValue()}? – h2mch

0

道歉爲了復活這條古老的線索。 如果您仍在使用Jboss 7.11或遇到類似問題並且不想使用EL(1).intValue()路由,那麼您還可以在管理bean中繞過它,如下所示: -

public String setItemValue(Long longVal) { 
    return setItemValue(longVal.intValue()); 
}