2016-12-16 4 views
0

Ich habe folgende Wasser-Down-Version von Primefaces Registerkartenansicht.zeigen und ausblenden Oberseiten Registerkarte über AJAX

<p:tabview> 
    <p:tab id="1"> 
     <p:selectOneMneu value="#{bean.answer}> 
      <f:selectItem itemValue="yes"/> 
      <f:selectItem itemValue="no" /> 
     </p:selectOneMenu> 
    </p:tab> 
    <p:tab id="2" rendered=#{bean.answer eq 'yes'} > 
     <h:outputText="answer is Yes."/> 
    </p:tab> 
    <p:tab id="3" rendered=#{bean.answer eq 'no'} > 
     <h:outputText="answer is No."/> 
    </p:tab> 
</p:tabView> 

Es gibt eine verwaltete Bean, die den ausgewählten Wert von "Ja" oder "Nein" erfasst. Wenn der Wert ausgewertet wird, hängt die Antwort davon ab, dass eine der Registerkarten ausgeblendet wird. Sobald Sie mit der getroffenen Auswahl zufrieden sind, klickt er/sie auf eine Senden-Schaltfläche, um die Daten zu veröffentlichen.

Meine Frage ist, was ist, wenn ein Benutzer seine/ihre Meinung ändert, bevor er eine Senden-Schaltfläche drückt. Gehen Sie zurück zum Dropdown-Menü (selectOneMenu) und ändern Sie den Wert von "yes" in "no". Dann hoffe ich dynamisch, dass die Bean aktualisierte Antworten abrufen würde, ohne die gesamte xhtml-Seite zu aktualisieren. Es scheint, als wäre Ajax die Antwort, aber ich bin mir nicht sicher, wie ich es lösen soll.

+0

auf das, was ich recherchiert, ich plane hinzufügen innerhalb von . Ich frage mich, ob ich in eine richtige Richtung gehe. Ich werde es auf dem App-Server bereitstellen und sehen, was passiert. – DaeYoung

+0

Funktioniert nicht, Registerkarte hat keinen Renderer. Sie können es nicht aktualisieren. Und wenn du es könntest, indem du es versteckst, indem du es nicht rendest, würde es dir niemals gelingen, es auf diese Weise zu enthüllen. Die einzige Option, die ich sehe, ist die Verwendung von JavaScript zur Manipulation der Sichtbarkeit über CSS – Kukeltje

+0

Sie können Registerkarten dynamisch hinzufügen oder entfernen. http://StackOverflow.com/questions/22293708/how-to-add-tabs-in-tabview-in-primefaces-dynamically-on-click-of-a-command-but – sunofkyuss

Antwort

0

Hier funktioniert es für mich. Ich hoffe, das ist was du brauchst. Jetzt müssen Sie die Seite nicht aktualisieren, aber Sie müssen das Formular aktualisieren. Ich weiß nicht warum, aber das Aktualisieren von tabView wirkt sich nicht auf irgendetwas aus.

<h:form> 

    <p:tabView> 

     <p:tab title="select"> 
      <p:selectOneMenu value="#{bean.answer}"> 
       <f:selectItem itemValue="none" itemLabel="select" /> 
       <f:selectItem itemValue="yes" itemLabel="yes" /> 
       <f:selectItem itemValue="no" itemLabel="no" /> 
       <f:ajax event="change" render="@form"/> 
      </p:selectOneMenu> 
     </p:tab> 

     <p:tab title="yes" rendered="#{bean.answer.equals('yes')}"> 
      <h:outputText value="answer is Yes." /> 
     </p:tab> 

     <p:tab title="no" rendered="#{bean.answer.equals('no')}"> 
      <h:outputText value="answer is No." /> 
     </p:tab> 

    </p:tabView> 

</h:form> 
+0

Dies funktioniert in dem Sinne, dass es alle Registerkarten vollständig aktualisiert, einschließlich der vollständigen (möglicherweise sehr komplexen Form in der ersten Registerkarte). Wenn das für OP akzeptabel ist, ist das eine gute Antwort (ich nahm an, dass das nicht der Fall war, da die Antwort, die Sie geben, ansonsten offensichtlich wäre, zumindest für mich). Wenn die beiden anderen Tabs einfach sind, ist die Verwendung von Javascript zum Ein- und Ausblenden einfacher (vorausgesetzt, dass dies kein Sicherheitsproblem darstellt) – Kukeltje

+0

@sunofkyuss: Ja, das ist es! Ich muss es mit Tag umwickeln. Ich wusste, dass etwas einfaches fehlte ... Jedoch ist das echte komplex. Der ursprüngliche Entwickler hat aus irgendeinem Grund kein Formular-Tag hinzugefügt. Ich werde es nur mit mehr spielen. Hope Einführung Form-Tag würde nicht beeinflussen andere Tabs nachteilig ... – DaeYoung

Verwandte Themen