에 selectManyListbox에 목록을 상황
ArrayList<Integer>
속성이있는 세션 범위 관리 빈 얼굴이 있습니다 유지를 위해 가능한 값의 목록을 유지 하나를하고 다른 선택된 값의리스트 JSF 페이지에는이 두 속성이 바인딩 된
<h:selectManyListBox>
구성 요소가 있습니다.
문제 : : 양식을 제출 한 후 선택한 값이 문자열로 변환됩니다 (ArrayList 유형의 속성은 실제로 두 개의 문자열을 보유합니다). 내가 변환기를 사용하는 경우 그러나, 나는이 같은 오류 메시지가 :
Validation Error: Value is not valid
질문 : 어떻게 제대로 <h:selectManyListBox>
구성 요소에 ArrayList<Integer>
속성을 바인딩 할 수 있습니다?
저를 도와 주셔서 감사합니다.
구체적인 코드
은 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>
그리고 관리 빈 :
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와 제대로 작동합니다. 나는 지금까지 [타입 소거] (http://docs.oracle.com/javase/tutorial/java/generics/erasure.html)에 대해 몰랐습니다 ... –
당신은 천만에요. – BalusC
@ BalusC, 감사합니다, 이것은 실제로 내 질문 [여기] (http://stackoverflow.com/q/14048382/516433)에 대한 답변으로 밝혀졌습니다. 이것은 이상한 방법으로 선물로 알아낼 고통스러운 하나가 될 수 있습니다. 그러나, 나는 더 잘 알고 있어야합니다 ... – Lucas