Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Wicket Java Discussion :

Redirection vers un Panel


Sujet :

Wicket Java

  1. #1
    Membre à l'essai
    Redirection vers un Panel
    Bonjour à tous !
    étant en novice dans le développement web je rencontre un petit problème au niveau du framework wicket.
    En effet je voudrais rediriger une page vers un contenu Panel. je m'explique :

    j'ai un lien Ajax et je voudrais que quand je clique sur le lien, cela change le contenu initial vers le nouveau ! donc TOUT reste identique sauf le contenu. le nouveau étant une classe qui hérite de "Panel".

    voici un peu les quelques codes que j'ai ecrit. si quelqu'un peut m'aider ca serait avec grand plaisir que j'accepte . Merci d'avance

    Ancienne Page .html

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     [....]
     
    <a href="#" wicket:id="numCmdeLink">
    													<span class="" wicket:id="numCmde">Ref Commande</span>										</a>
     
    [...]


    Ancienne Page .java

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    [...]
     
    IndicatingAjaxLink<Void> detailCommandeLink = new IndicatingAjaxLink<Void>("numCmdeLink") {
     
    					private static final long serialVersionUID = 1L;
     
     
    					@Override
    					public void onClick(AjaxRequestTarget target) {
    						//open page for detail commande Page 
    // je ne sais pas quoi ecrire ici <img src="images/smilies/icon_sad.gif" border="0" alt="" title=":(" class="inlineimg" />... 
    // je suis passé par setResponsePage mais cela me redirige vers une nouvelle
    // page ce que je ne veux pas. je voudrais juste que le contenu change...
     
     
    					}
    				};
     
    [...]



    Nouvelle Page .html

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <html xmlns:wicket="http://wicket.apache.org/">
    <body>
    <wicket:panel>
    	<div class="spacer" wicket:id="dynamicPanel">
    		<div class="feedback" wicket:id="feedbackCas"></div>
    	</div>
    </wicket:panel>
    </body>
    </html>


    Nouvelle Page .java

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class CasPanel extends Panel { 
     
    public CasPanel(final String id) {
    		super(id);
    		createComponents();
    	}
     
    	/**
             * create the home page with search/result components
             */
    	protected void createComponents() {
     
    		// panel de feedback
    		final HiddenFeedbackPanel feedback = new HiddenFeedbackPanel("feedbackCas", true);
    		feedback.setOutputMarkupId(true);
    		add(feedback);
    }
    }

  2. #2
    Membre à l'essai
    Bonjour,

    En fait tu veux changer le panel.
    Ce n'est pas une redirection. Le concept de redirection ne s'applique que pour les pages.

    Dans la méthode
    public void onClick(AjaxRequestTarget target)
    tu crées le nouveau panel et tu l'ajoutes à la target.

    Tu as 1 exemple très détaillé sur la page :
    http://yeswicket.com/index.php?post/...Wicket-en-Ajax

    Tu as aussi plein d'exemples sur la page
    http://www.wicket-library.com/wicket-examples/ajax




    François

  3. #3
    Membre à l'essai
    Oui c'est vrai je me suis mal exprimer. le premier exemple peut bien m'aider mais il y a une chose que je n'arrive pas à comprendre. le moment de remplacer l'ancien Panel par le nouveau.

    Dans la méthode onClick du lien Ajax, nous devons créer une instance du panel AddContactPanel en utilisant le même identifiant Wicket que le composant dynamicPanel.
    est ce que cela veut dire que dans le fichier HTML courant et celui que je dois charger doivent avoir un composant wicket avec le même identifiant? à savoir "dynamicPanel"??

  4. #4
    Membre à l'essai
    Oui le panel nouveau qui doit remplacer l'ancien doit avoir le même identifiant.

    François

  5. #5
    Membre à l'essai
    bon y a toujours l'erreur. voici le nouveau code que j'ai mis.

    mon HTML Courant et .java

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    private WebMarkupContainer dynamic;
     
                 dynamic = new WebMarkupContainer("caspanel");
                 dynamic.setOutputMarkupId(true);
                 add(dynamic);
     
    // =====================================================
                               // Button  ND/Number of CommandBean 
                               // ===================================================== 
     
                               IndicatingAjaxLink<Void> ndCommandLink = new IndicatingAjaxLink<Void>("ndCmdeLink") {
     
                                      private static final long serialVersionUID = 1L;
     
                                      @Override
                                      public void onClick(AjaxRequestTarget target) {
                                            // open page for detail commande Page 
     
                                            replaceEmptyPanel(target, new CasPanel("caspanel"));
                                      }
     
                                      private void replaceEmptyPanel(AjaxRequestTarget target,
                                                   Panel newPanel) {
                                            dynamic.replaceWith(newPanel);
                                            dynamic = newPanel;
                                            target.addComponent(newPanel);
     
                                      }
     
                               };



    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <a href="#" wicket:id="numCmdeLink">
           <span class="" wicket:id="numCmde">Ref Commande</span>                                                                                                    
    </a>
     
    <div wicket:id="caspanel"></div>


    Nouveau .html et .java
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html xmlns:wicket="http://wicket.apache.org/">
    <body>
    <wicket:panel>
           <div class="spacer" wicket:id="ongletFiltrage">
                 <div class="feedback" wicket:id="feedbackCas"></div>
                 <div wicket:id="detailsBlockPanel" class="block blockLarge"></div>
    <!--         <div wicket:id="formulaireBlockPanel" class="block blockLarge"></div> -->
    <!--         <div wicket:id="consignesBlockPanel" class="block blockLarge"></div> -->
    </div>
     
    </wicket:panel>
    </body>
    </html>


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class CasPanel extends TabPanel {
     
    	private static final long serialVersionUID = 3733297937336451612L;
     
    	private WebMarkupContainer dynamic;
     
    	public CasPanel(String id) {
    		super(id);
    		createComponents();
    	}
     
    	private void createComponents() {
    		// TODO Auto-generated method stub
    		dynamic = new WebMarkupContainer("caspanel");
    		dynamic.setOutputMarkupId(true);
    		add(dynamic);
    		// panel de feedback
    		final HiddenFeedbackPanel feedback = new HiddenFeedbackPanel("feedbackCas", true);
    		feedback.setOutputMarkupId(true);
    		dynamic.add(feedback);
     
    		dynamic.add(new Label ("detailsBlockPanel"," tototototot"));
    	}
     
     
     
    }


    Erreur sur la console eclipse

    ERROR RequestCycle(1521) - cannot update component that does not have setOutputMarkupId property set to true. Component: [MarkupContainer [Component id = caspanel]]
    java.lang.IllegalArgumentException: cannot update component that does not have setOutputMarkupId property set to true. Component: [MarkupContainer [Component id = caspanel]]
    at org.apache.wicket.ajax.AjaxRequestTarget.addComponent(AjaxRequestTarget.java:346)
    at com.page.filtrage.FiltragePage$CategorieListView$CommandListView$1.replaceEmptyPanel(FiltragePage.java:328)
    at com..FiltragePage$CategorieListView$CommandListView$1.onClick(FiltragePage.java:321)
    at org.apache.wicket.ajax.markup.html.AjaxLink$1.onEvent(AjaxLink.java:68)
    at org.apache.wicket.ajax.AjaxEventBehavior.respond(AjaxEventBehavior.java:177)
    at org.apache.wicket.ajax.AbstractDefaultAjaxBehavior.onRequest(AbstractDefaultAjaxBehavior.java:286)
    at org.apache.wicket.request.target.component.listener.BehaviorRequestTarget.processEvents(BehaviorRequestTarget.java:119)
    at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
    at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250)
    at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
    at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428)
    at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
    at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:479)
    at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:312)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at clara.security.filter.SecurityFilter.doFilter(SecurityFilter.java:259)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at .filter.IpFilter.doFilter(IpFilter.java:70)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.ow2.jonas.web.tomcat6.CheckOpenResourcesValve.invoke(CheckOpenResourcesValve.java:73)
    at org.ow2.jonas.web.tomcat6.tx.TransactionValve.invoke(TransactionValve.java:90)
    at org.ow2.jonas.web.tomcat6.ResetAuthenticationValve.invoke(ResetAuthenticationValve.java:95)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.ow2.jonas.web.tomcat6.versioning.VersioningValve.invoke(VersioningValve.java:75)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)

  6. #6
    Membre à l'essai
    dans le lien ndCommandLink il y a un problème dans la création du panel. replaceEmptyPanel(target, new CasPanel("caspanel"));

    Il faut que le panel CasPanel appelle la méthode setOutputMarkupId( true )
    pour qu'Ajax retrouve l'id du composant lors de l'update.

    Panel panel = new CasPanel("caspanel");
    panel.setOutputMarkupId(true);
    replaceEmptyPanel(target, panel);


    François

  7. #7
    Membre à l'essai
    Impeccable merci beaucoup pour ton aide...maintenant plus de probleme

    à bientot peut etre

###raw>template_hook.ano_emploi###