2010-02-19 7 views
0

내 응용 프로그램에서 구성 요소를 동적으로 변경해야합니다. 나는 두 열을 가지고있는 데이터 테이블을 가지고 있는데, 먼저 <h:selectoneMenu>이 두 개 있습니다 (데이터는 1과 2). 그러면 1이 선택되면 <h:inputText>이 나타나야하고 2가 선택되면 <h:selectoneMenu>이 나타나야합니다. . 이 작업을 수행하는 데 도움이 필요하십니까?JSF에서 동적으로 컴포넌트를 추가 하시겠습니까?

내 JSF

<h:selectOneMenu id="menu" value="#{sample.data}" rendered="true" valueChangeListener="#{sample.change}"> 
    <f:selectItem itemLabel="Data" itemValue=""/> 
    <f:selectItems value="#{sample.list1}"/> 
      <a4j:support event="onchange" reRender="text" /> 
</h:selectOneMenu> 
<h:inputText id="text" value="#{sample.input}" rendered="#{sample.status}" /> 

내 선택 게재 콩 클래스

public class Sample { 
private Boolean status;   //Getter & Setter 
private List<SelectItem> list1; //Setter 
private String input;   //Getter & Setter 
private String data;    //Getter & Setter 

public void change(ValueChangeEvent event){ 
System.out.println((String)event.getNewValue()); 
if(((String)event.getNewValue()).equals("value1")){ 
    status=true; 
} 
else if(((String)event.getNewValue()).equals("value2")){ 
    status=false; 
} 
} 
public Boolean getStatus(){ 
if(status==null){ 
    status=true; 
} 
return status; 
} 
public List<SelectItem> getList1() { 
if(list1==null) { 
list1 = new ArrayList<SelectItem>(); 
list1.add(new SelectItem("value1", "label1")); 
list1.add(new SelectItem("value2", "label2")); 
} 
return list1; 
} 
} 
+1

4k 회보기, 아니요 득표? –

답변

5

내 조언은 다음과 같습니다/동적으로 추가 구성 요소를 제거하지 마십시오. 문제 다른 방법으로 해결 : 구성 요소의

  • 이 동적 요소를 제거/추가 구성 요소
  • 에 속하는 데이터를 리 바인드

    • 가시성 토글하는 것은 항상 문제의 소스와 기회는 훨씬 더 간단하게 다른 방법으로 그것을 할 수 있습니다.

      귀하의 경우 rendered 속성을 사용하여 가시성을 가지고 게임하는 것으로 충분할 것입니다.

    +0

    그러면 제공된 데이터에 따라 가시성을 변경하는 방법 ... – Hariharbalaji

    +0

    관리 빈에서 가시성을 변경할 수 있습니까? – Hariharbalaji

    +0

    ewernli는 변경하려는 구성 요소를 다시 렌더링해야한다고 말했습니다. 전체 페이지를 다시로드하거나 AJAX를 사용하여 원하는 구성 요소를 다시로드하여이 작업을 수행 할 수 있습니다. 좀 더 자세한 답변을 제공하기 위해 어떤 구성 요소 라이브러리를 사용하고 있는지 더 많은 정보가 있어야합니다. – Averroes

    2

    의 당신은 당신이 모두에게 당신의 JSP 페이지의 구성 요소가이

    <h:selectoneMenu id="selectOne" rendered="#{myBean.selectOneRendered}"> 
    <h:inputText id="input" rendered="#{!myBean.selectOneRendered}"> 
    

    같은 있다고 가정 해 봅시다. jsp를 다시로드하면 렌더링 된 속성이 검사됩니다. 결과는 다음 selectOne 메서드가 렌더링되는 사실이며, 입력하지 않습니다 둥근 다른 방법으로 경우에 당신이해야합니다에서 myBean에

    public boolean isSelectOneRendered(){ 
    boolean rendered; 
    //Do something here 
    return rendered; 
    } 
    

    같은 것을 가지고 있습니다.

    관련 문제