2015-03-06 3 views
0

Utilisation de Seam 2.2.2.Final et Richfaces 3.3.3.Final.Utilisation de l'onglet tabPanel de l'onglet richfaces

Je dois effectuer une action lorsque l'utilisateur quitte un onglet, et cette action ne peut avoir lieu qu'après que toute la page soit chargée, il y a un certain bean init qui a lieu sur chaque contenu d'onglet. Alors je suis allé lire.

Le problème est, avec 3 onglets, par exemple, lorsque chaque onglet est rendu et que le rendu passe pour le suivant, la commande est déclenchée. Pas bon, haricot non initialisé et je me suis pointé nullpointer sur moi!

De toute façon pour éviter ce comportement sur cette étiquette? Comme je fais une amélioration sur une très grande application, j'essaie de déranger le code déployé aussi peu que possible.

Merci d'avance pour jeter un oeil. Voici un exemple de code pour ma page:

<?xml version="1.0" encoding="ISO-8859-1"?> 

<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:s="http://jboss.com/products/seam/taglib" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:a="http://richfaces.org/a4j" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:f="http://java.sun.com/jsf/core" 
       xmlns:rich="http://richfaces.ajax4jsf.org/rich" 
       template="/WEB-INF/xhtml/templates/frameTemplate.xhtml"> 


    <ui:param name="pageTitle" value="Elaborar relatório, voto e ementa" /> 
    <ui:define name="title">#{pageTitle}</ui:define> 
    <ui:param name="home" value="#{sessionProcess}" /> 

    <ui:define name="frameBody"> 
     <rich:jQuery query="hide()" selector="#update" timing="onload"/> 

    <s:div id="allTabs"> 
     <rich:tabPanel title="Tab1" switchType="ajax" style="width: 100%;"> 
      <rich:tab label="Report" 
       rendered="#{!sessionProcess.hideReport}" 
       title="Report" style="width: 100%;" 
       action="#{sessionProcess.setReport()}" immediate="true" ontableave="#{sessionProcess.writeDraftReport()}"> 
       . 
       . 
       . 
     <rich:tabPanel title="Tab2" switchType="ajax" style="width: 100%;"> 
      <rich:tab label="Vote" 
       rendered="#{!sessionProcess.hideVote}" 
       title="Report" style="width: 100%;" 
       action="#{sessionProcess.setVote()}" immediate="true" ontableave="#{sessionProcess.writeDraftVote()}"> 
       . 
       . 
       . 

Répondre

-1

Le @ontableave est pour le code côté client, à savoir JavaScript, et non pour les méthodes de haricots. Si vous avez besoin d'exécuter quelque chose sur le serveur en réponse à un événement côté client, utilisez <a4j:support>:

<rich:tab label="Report" … > 
    <a4j:support event="ontableave" 
       action="#{sessionProcess.writeDraftReport()}" /> 
</rich:tab> 
+0

Oui, thankx, thats it. Je dois regarder les cycles de vie pour de vrai, sinon j'abandonne tout ça ... –