2013-05-09 166 views
1

我跟着BalusC給出的[這個回答] [1]用AJAX顯示/隱藏JSF元素後如何隱藏觸發元素?

[1]:JSF and f:ajax for hiding/showing div它的工作。但是,當按下命令按鈕並顯示id =「incorrectQuestion」的元素時,我想隱藏該元素。我在例子中幾乎是這樣做的。我嘗試了很多組合,但無法隱藏命令按鈕。

  <h:panelGroup rendered="#{not answerResultBean.showIncorrectQuestions}"> 
       <div id="loginDiv" style="width: 400px; text-align: left;"> 
        <center> 
         <f:ajax render="incorrectQuestions"> 
          <br /> 
          <h:commandButton value="#{strings.failedQuestions}" 
           action="#{answerResultBean.setShowIncorrectQuestions(true)}" /> 
          <br /> 
          <br /> 
         </f:ajax> 
        </center> 
       </div> 
      </h:panelGroup> 
      <h:panelGroup id="incorrectQuestions"> 
       <h:panelGroup rendered="#{answerResultBean.showIncorrectQuestions}"> 
        <div id="loginDiv" style="width: 400px; text-align: left;"> 
      ... 
+0

如果bean是請求作用域並且在構建(後)過程中不保留'showIncorrectQuestions'屬性,則此構造將失敗。你的bean是否確實請求作用域? – BalusC 2013-05-09 19:19:50

+0

不,該bean是會話作用域。我只是想在顯示第二個小組後隱藏第一個小組。 – CyberGriZzly 2013-05-09 19:22:11

+0

然後請發佈SSCCE。該問題在迄今爲止發佈的代碼中不可見。在一個不相關的說明中,從1998年HTML 4.01開始,HTML'

'元素已被棄用。我建議擦亮你的HTML並重新檢查,如果你真的是基於最新的資源學習HTML而不是15歲以上的HTML。 – BalusC 2013-05-09 19:37:33

回答

3

只要把<h:panelGroup>包含在<h:panelGroup id="incorrectQuestions">裏面。這樣它也會在ajax請求上更新,並且rendered條件會導致它被隱藏。

順便說一句,請儘量保持您的代碼乾爽。你有很多代碼重複。

<h:panelGroup layout="block" id="loginDiv" style="width: 400px; text-align: left;"> 
    <h:commandButton value="#{strings.failedQuestions}" 
     action="#{answerResultBean.setShowIncorrectQuestions(true)}" 
     style="text-align: center; margin: 10px;" 
     rendered="#{not answerResultBean.showIncorrectQuestions}"> 
     <f:ajax render="loginDiv"> 
    </h:commandButton> 
    <h:panelGroup rendered="#{answerResultBean.showIncorrectQuestions}"> 
     ... 
    </h:panelGroup> 
</h:panelGroup> 

注意,一個<h:panelGroup layout="block">生成<div>。這樣就不需要<h:panelGroup><div>