2010-01-11 4 views
1

나는 콩이있다 :컬렉션 요소를 selectManyListbox의 항목으로 표시하는 방법은 무엇입니까?

public ProjectServiceImpl {  
    public List<Project> getAllProjects() { ... } 
} 

<h:selectManyListbox>에있는 모든 항목으로이 모든 프로젝트를 나열하고 싶다. 사용자가 하나 이상의 항목을 선택하고 제출 버튼을 누르면 선택한 항목을 프로젝트로 변환해야합니다.

항목을 나열하는 방법과 해당 변환기가 어떻게 나타나야하는지에 대해 약간 혼란 스럽습니까?

답변

2

고유 한 HTTP 요청 매개 변수로 사용할 수있는 문자열 표현으로 원하는 Java 객체가 표현되도록 Converter#getAsString()을 구현해야합니다. 데이터베이스 기술 ID (기본 키)를 사용하면 매우입니다. HTTP 요청 매개 변수 (정의 String 당이다) (귀하의 경우 Project) 원하는 자바 오브젝트로 변환 할 수 있도록

public String getAsString(FacesContext context, UIComponent component, Object value) { 
    // Convert the Project object to its unique String representation. 
    return String.valueOf(((Project) value).getId()); 
} 

은 그럼 당신은`Converter#getAsObject()를 구현해야합니다.

public Object getAsObject(FacesContext context, UIComponent component, String value) { 
    // Convert the unique String representation of Project to the actual Project object. 
    return projectDAO.find(Long.valueOf(value)); 
} 

Project이 사진에 converterId 또는 f:converter 지정할 필요 온다 때 마지막으로 단지 문제의 객체 타입이 변환기를 연결, JSF는 변환에 대한 처리됩니다 :

<converter> 
    <converter-for-class>com.example.Project</converter-for-class> 
    <converter-class>com.example.ProjectConverter</converter-class> 
</converter> 

이를 방금 SelectItemProject 값으로 생성 할 수 있습니다.

당신은이 블로그 글에서 일부 배경 정보와 더 많은 아이디어를 얻을 수 있습니다 : http://balusc.blogspot.com/2007/09/objects-in-hselectonemenu.html

1

<h:selectManyListbox>의 항목을 나열하려면 <f:selectItems>을 사용하고 SelectItem 개체의 목록을 가리켜 야합니다.

내가 일반적으로 접근하는 방식은 프로젝트를 반복하고 각 프로젝트를 SelectItem으로 변환하는 것입니다. 동시에 SelectItem 값을 키로 사용하여 HashMap에 프로젝트를 저장합니다. 그런 다음 프로젝트 객체 목록을 가져와야 할 때 선택한 값을 반복하고지도에서 객체를 가져올 수 있습니다.

HashMap을 만들고 싶지 않은 경우 목록의 Project 위치를 SelectItem 값으로 사용하고 그런 방식으로 프로젝트를 조회 할 수 있습니다.

+0

그의 문제가없는 방법을 선택 항목을 만드는 방법'Project'와 같은 선택 항목, 같은 비표준 객체를 사용하는 방법에 더 많은 것이다. – BalusC

+0

방금 ​​대안을 줄 것이라고 생각했습니다. –

관련 문제