2013-05-09 155 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>