情況: 我有一個JavaServer Faces頁面,並有兩個ArrayList<Integer>
性能會話範圍的託管bean:一個用於固定的可能值的列表,另一個用於舉行所選值的列表。在JSF頁面上有一個<h:selectManyListBox>
組件,並綁定了這兩個屬性。如何<Integer>值綁定列表來selectManyListbox在JSF
問題:提交表單後,選定的值將被轉換爲字符串(ArrayList類型的屬性實際上包含幾個字符串!然而,當我使用一個轉換器,我得到這樣的錯誤消息:
Validation Error: Value is not valid
問題:我怎樣才能在ArrayList<Integer>
屬性綁定到<h:selectManyListBox>
成分是否正確?
謝謝你的好意幫助我。
具體代碼
JSF頁面:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>
<h:form>
<h:selectManyListbox value="#{testBean.selection}">
<f:selectItems value="#{testBean.list}"></f:selectItems>
</h:selectManyListbox>
<h:commandButton action="#{testBean.go}" value="go" />
<ui:repeat value="#{testBean.selection}" var="i">
#{i}: #{i.getClass()}
</ui:repeat>
</h:form>
</h:body>
</html>
和管理bean:
import java.io.Serializable;
import java.util.ArrayList;
@javax.faces.bean.ManagedBean
@javax.enterprise.context.SessionScoped
public class TestBean implements Serializable
{
private ArrayList<Integer> selection;
private ArrayList<Integer> list;
public ArrayList<Integer> getList()
{
if(list == null || list.isEmpty())
{
list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
}
return list;
}
public void setList(ArrayList<Integer> list)
{
this.list = list;
}
public ArrayList<Integer> getSelection()
{
return selection;
}
public void setSelection(ArrayList<Integer> selection)
{
this.selection = selection;
}
public String go()
{
// This throws an exception: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
/*for (Integer i : selection)
{
System.out.println(i);
}*/
return null;
}
}
謝謝!該代碼與添加的IntegerConverter正常工作。我到目前爲止還不知道[type erasure](http://docs.oracle.com/javase/tutorial/java/generics/erasure.html)... –
不客氣。 – BalusC
@BalusC,謝謝,這實際上證明是我的問題的答案[這裏](http://stackoverflow.com/q/14048382/516433)。這可能是一個痛苦的人,因爲它以奇怪的方式呈現。不過,我應該只知道更好的... – Lucas