2010-08-23 7 views
1

JSF를 사용하여 시나리오를 구현하려고합니다. 나는 commandExButton을 가지고 있는데, 사용자가이 버튼을 누르면 "selectManyCheckBox"항목이 포함 된 panelDialog이 표시됩니다. 지속적으로 업데이트되는 하나의 파일을 구문 분석하여 백엔드 빈에서 이러한 항목을 생성합니다. 내가 원한다면이 버튼을 클릭 할 때마다 백엔드 빈을 통해 파일을 구문 분석하여 최신 selectItem을 얻어야한다. 하지만 내가 처음으로 렌더링 할 때 생성 된 것과 동일한 selectItem을 얻는다. 따라서 현재로서는 페이지를 실제로 새로 고치는 한 개의 새로 고침 단추를 포함하고 사용자가 "A"를 클릭하여 현재 파일의 내용을 구문 분석하여 최신 selectItem을 가져 오는 일시적인 해결책이 있습니다. 하지만 어쨌든 새 버튼을 추가하거나 기존 버튼을 사용하지 않으면 어떻게됩니까?동적으로 새로 고침하는 방법 h : selectManyCheckbox selectItems

다음은 내가 콩에

<td> 
    <hx:commandExButton id="preferenceButton" styleClass="form" value="#{nls.preferenceLink}" 
     title="#{nls.preferenceLinkTitle}" type="submit" /> 
</td> 
<td> 
    <h:form id="PrefForm" rendered="#{Test.isCurrent}"> 
     <hx:panelDialog type="modal" id="preferenceSet" styleClass="panelDialog" for="preferenceButton" 
      title="#{nls.preferenceDialogTitle}"> 
      <h:outputText styleClass="panelStartMessage" style="display:block;" 
       value="#{nls.preferenceDialogWindowText}" /> 
      <h:panelGroup rendered="#{Test.hasSelectItem }" 
       style="display:block;width:300px;height:360px;overflow:auto;" styleClass="panelGroup" 
       id="prefPanelGroup"> 
       <h:selectManyCheckbox value="#{Test.selectedItems}" layout="pageDirection"> 
        <f:selectItems value="#{Test.selectItems}" /> 
       </h:selectManyCheckbox> 
      </h:panelGroup> 
      <hx:panelBox styleClass="information_box" id="noCommandWindow" layout="lineDirection" 
       rendered="#{!Test.hasSelectItem }"> 
       <h:outputText styleClass="outputText" id="cmdInfo" value="#{nls.noCommands}" /> 
      </hx:panelBox> 
      <hx:panelBox id="buttonBox1" styleClass="panelStartBox" layout="lineDirection"> 
       <hx:commandExButton id="submitPref" styleClass="commandExButton" type="submit" 
        value="#{nls.submit}" action="#{Test.action}"> 
        <hx:behavior event="onclick" behaviorAction="hide" targetAction="preferenceSet" 
         id="behaviorSubmitPref" /> 
       </hx:commandExButton> 
       <hx:commandExButton id="CancelPref" styleClass="commandExButton" type="submit" 
        value="#{nls.cancel}" action="Test"> 
        <hx:behavior event="onclick" behaviorAction="hide" targetAction="preferenceSet" 
         id="behaviorCancelPref" /> 
       </hx:commandExButton> 
      </hx:panelBox> 
     </hx:panelDialog> 
    </h:form> 
</td> 

코드를 사용하고있는 코드입니다 :

public class Test{ 
    private List<String> selectedItems; 
    private List<SelectItem> selectItems; 

    public List<SelectItem> getSelectItems() { 
     // populate the selectItem here... 
    }  
} 

답변

1

스토어는 별도의 세션에서 List<SelectItem> selectItems가 빈을 범위 (현재 하나가 범위 요청임을 가정) 구성 중에 입력하고 reload()과 같은 메서드를 추가합니다.이 메서드는 작업 메서드에서 선택한 항목을 처리 한 후에 만 호출합니다. @ManagedProperty 범위의 요청 내부에서 세션 범위 Bean에 액세스 할 수 있습니다.

+0

안녕 BalusC, 답장을 보내 주셔서 감사합니다. 현재의 bean은 오직 세션 범위입니다. action 및 actionListener 메서드를 selectItems에 바인딩하고 해당 패널 대화 상자에 최신 체크 상자 선택 항목을 표시 한 후 시도했습니다. 하지만 버튼은 bean 메소드를 전혀 호출하지 않고 있으며, 실제로 여기에 붙어 있습니다. 다른 대안이 있니? –

+0

"작성 과정에서 채우고 reload()와 같은 메소드를 추가하십시오. -이 컴포넌트를 어느 컴포넌트에 바인딩해야합니까? 다른 버튼을 추가하고 새로 고침 버튼을 추가해야합니까? 그러나 그 경우에는 피할 수있는 전체 페이지를 새로 고칩니다. JSF에 익숙하지 않으므로 여기에서 명백한 것을 전혀 이해하지 못했다면 제한된 지식으로 만 참아주십시오. –

관련 문제