2011-01-25 3 views
1

JSF를 처음 접했을 때 JSF 수명주기를 읽었지만이를 달성하는 방법을 이해할 수 없었습니다.jsf에서 페이지로드시 드롭 다운을 채우는 방법은 무엇입니까?

저는 컨트롤러에 "도시"와 다른 컨트롤러 "국가"라고 말했습니다. 이제 검색 기능을 제공 할 새 페이지를 만들겠습니다. 해당 페이지에서 두 번의 드롭 다운을 보여주었습니다 (국가 및 도시별로 하나씩). 첫 번째 드롭 다운을 페이지로드시 채우기를 원합니다. 어떤 컨트롤러를 사용할 지 말해 주시겠습니까? 도시/국가? 또는 새로운 것을 만드시겠습니까? 및 페이지로드시 데이터를로드하는 방법?

감사합니다.

답변

2

국가 및 도시 컬렉션을 보유 할 페이지에 하나의 컨트롤러를 사용하는 것이 좋습니다. 페이지로드하는 국가를로드하려면 @Postconstruct로 주석 된 메소드를 만들어야합니다. 이 방법에서는 초기화 작업을 수행합니다. 즉 컨트롤러에서

@PostConstruct 
public void init(){ 
    //do your initialization 
} 
0

당신은 public List<SelectItem> getFirmaTyp() 게터 필요하고보기에 당신은 다음과 같이 있어야합니다.

<h:selectOneMenu value="#{yourController.firma.typ.id}"> 
    <f:selectItems value="#{yourController.firmaTyp}" /> 
</h:selectOneMenu> 

게터는 페이지가 표시 될 때마다 호출됩니다. 내 예제에서는 포스트 백에서 dropDown의 id는 yourController.firma.typ.id와 같은 엔티티 회사 유형 및 ID로 설정됩니다.

1

국가는 정적 콜렉션 일 가능성이 높기 때문에 국가는 정적 콜렉션을 사용하여 애플리케이션 범위 bean을 작성할 수 있습니다. 국가 (주요 국가 이름, 가치 국가 코드)를 보유하고 있습니다.

그런 다음 국가 드롭 다운이 필요한 모든보기에서 <f:selectItems>을 간단히 바인딩하십시오.

.Xhtml

<h:selectOneMenu> 
    <f:selectItems value="#{myController.listItems}"/> 
</h:selectOneMenu> 

콩 :;

(BTW이 솔루션에 대한 BalusC 학점)

4

모두가 올바른지은), 당신은 <f:selectItems/>

예를 사용해야합니다

public class MyController{ 
    //The list with the items 
    private List<SelectItem> listItems = null; 

    public MyController { 
     loadCombo(); 
    } 

    (...) 

    //Loading the items 
    private void loadCombo() { 
     listItems = new ArrayList<SelectItem>(); 

     //You can do with BD data using a for. How to add a new item: 
     //listItems.add(new SelectItem("itemValue", "itemLabel")); 

     listItems.add(new SelectItem("1", "Item 1")); 
     listItems.add(new SelectItem("2", "Item 2")); 
     listItems.add(new SelectItem("3", "Item 3")); 
     listItems.add(new SelectItem("4", "Item 4")); 
    } 

    (...) 

    //Getters and setters 
} 

"get"메소드로 목록을 채우지 마십시오. JSF가이를 두 번 이상 호출하므로 성능이 저하 될 수 있습니다.

+0

예. getter 메소드에 논리를 쓰지 마십시오. 매번 호출됩니다. – Krishna

관련 문제