2012-03-05 2 views
0

일부 조사를하는 동안 비슷한 질문을 발견했지만 그 중 아무 것도 실제로 내 문제를 해결하지 못했습니다.JSF2/Primefaces에서 동적으로 구성 요소 추가/제거

입력 기준과 제출 버튼이있는 양식이 있습니다. submit을 클릭하면 primefaces 데이터 테이블이 폼 아래에 몇 가지 결과로 채워집니다. 필요한 것은 전체 페이지를 새로 고치지 않고 입력 한 데이터에 따라 다른 테이블을 표시하는 것입니다. 예 : 사용자가 Person에 값을 입력하면 Person 테이블에 대한 결과가 표시됩니다. 그러나 사용자가 회사를 선택하면 회사에 대한 결과가 해당 열과 함께 표시됩니다.

+0

"전체 페이지를 새로 고치지 않고"다음 대신 전체 사이트의 답변 – djmj

답변

2

update 속성을 사용하여 데이터 테이블을 업데이트하십시오. 또한 <p:columns>을 사용하여 동적으로 열을 생성 할 수 있습니다. 같은 뭔가

<p:inputText value="#{bean.input}" /> 
<p:commandButton value="submit" action="#{bean.submit}" update="table" /> 

<p:dataTable id="table" value="#{bean.model}" var="item"> 
    <p:columns value="#{bean.columns}" var="column"> 
     <h:outputText value="#{item[column]}" /> 
    </p:columns> 
</p:dataTable> 

:

public void submit() { 
    model = populateModelBasedOn(input); 
    columns = populateColumnsBasedOn(input); 
} 
+0

감사를 특정 구성 요소를 업데이트 primefaces는 아약스 요청에 속성 업데이트를 사용합니다. 내가 틀렸다면 나를 바로 잡아라. 그러나 model은 테이블의 키/값 쌍을 포함하는 하나의 HashMap을 가진 목록이다. 그런 다음 중괄호 표기법을 사용하여 해시 맵의 각 값에 열 이름 (항목 [열])으로 액세스합니까? 당신이 볼 수있는 것처럼 jsf에 꽤 새로운 :) –

+0

그것은 또한 단지 자바 빈일 수 있습니다. 중괄호 표기법을 사용하면 동적 속성 이름을 사용할 수 있습니다. '# {bean.columns}'는 속성 이름만을 포함합니다. – BalusC