Radojcin, I appreciate your quick reply. If it is not for developers like you, working with open source wouldn't be such a joy. I modified the source as per the posting(XDT-1648) with CVS diff details. It seems to be working fine. But it may be better to revisit those changes in light of this information I got from you. Thanks Sowjanya
________________________________ From: [EMAIL PROTECTED] on behalf of S. Radojcin Sent: Sun 7/22/2007 4:31 AM To: Janga, Sowjanya; [EMAIL PROTECTED]; [email protected] Subject: Re: [Xdoclet-user] JSF redirect attribte or fix for XDT-1648. - A long time ago, I made the following changes for the XDoclet 1.2.2, in order to achieve this goal. So, here is my changes: 1. from xdoclet-jsf-module-1.2.2.jar/xdoclet/modules/jsf/resources , take the faces_config_xml.xdt , and replace the current <XDtFacesNavigation:forAllViews> .......... </XDtFacesNavigation:forAllViews> with the following one: <XDtFacesNavigation:forAllViews> <navigation-rule> <XDtFacesNavigation:ifNeedFromViewId> <!-- by cwele, from-view-id vise nije obavezno: --> <from-view-id><XDtFacesNavigation:fromView/></from-view-id> </XDtFacesNavigation:ifNeedFromViewId> <XDtFacesNavigation:forAllRules> <navigation-case> <XDtFacesNavigation:ifHasFromAction> <!-- from-action, added by cwele:--> <from-action><XDtFacesNavigation:fromAction/></from-action> </XDtFacesNavigation:ifHasFromAction> <from-outcome><XDtFacesNavigation:outcome/></from-outcome> <to-view-id><XDtFacesNavigation:toView/></to-view-id> <XDtFacesNavigation:ifNeedRedirect> <!-- redirect, added by cwele:--> <redirect/> </XDtFacesNavigation:ifNeedRedirect> </navigation-case> </XDtFacesNavigation:forAllRules> </navigation-rule> </XDtFacesNavigation:forAllViews> 2. take the NavigationTagsHandler.java, and replace with following one: package xdoclet.modules.jsf; import java.util.*; import xdoclet.*; import xjavadoc.*; /** --- TEST PRIMERI --- primer bez from-view-id:--- * @jsf.navigation * fromAction="#{reportHandler.yyy}" result="xxx" to="/yyy.jsp" * @jsf.navigation from="/prefFont.jsp" * fromAction="#{reportHandler.firstAction}" result="success" to="/prefLang.jsp" * redirect="false" @jsf.navigation from="/prefFont.jsp" * fromAction="#{reportHandler.secondAction}" result="success" to="/menuArea.jsp" * redirect="true" * @jsf.navigation from="/index.jsp" * fromAction="#{reportHandler.thirdAction}" result="ok" to="/allReports.jsp" * redirect="true" * * @jsf.navigation from="/test.jsp" result="cancel" to="/menuArea.jsp" * redirect="true" */ public class NavigationTagsHandler extends XDocletTagSupport { /** samo prost bean sa geterima, koji vracaju vrednosti proslednjene u konstruktoru */ private class JsfNavigationRule { public String getFromView() { return fromView; } public String getOutcome() { return outcome; } public String getToView() { return toView; } private String fromView; private String outcome; private String toView; public JsfNavigationRule(String fromView, String outcome, String toView) { /* by cwele: this.fromView = null; this.outcome = null; this.toView = null; this.fromView = fromView; this.outcome = outcome; this.toView = toView; */ this(fromView, outcome, toView, null, null); } /** by cwele: konstruktor koji, pored <from-view_id> prima sve sto moze da se nadje u okviru <navigation-case>...</navigation-case> */ private String fromAction; private String redirect; public String getFromAction(){ return fromAction; } public String getRedirect(){ return redirect; } /** by cwele: konstruktor koji, pored <from-view_id> prima sve sto moze da se nadje u okviru <navigation-case>...</navigation-case> */ public JsfNavigationRule(String fromView, String outcome, String toView, String fromAction, String redirect) { this.fromView = null; this.outcome = null; this.toView = null; this.fromAction = null; //ajde da sledim njih... mada... this.redirect = null; this.fromView = fromView; this.outcome = outcome; this.toView = toView; this.fromAction = fromAction; this.redirect = redirect; } }// of JsfNavigationRule class public NavigationTagsHandler() { currentRule = null; fromViewId = null; rules = new HashMap(); } public void forAllRules(String template) throws XDocletException { Collection viewRules; if (generateFromViewId){// treba from-view-id, 'fromViewId' je postavljeno u forAllViews() viewRules = (Collection)rules.get(fromViewId); }else{ viewRules = (Collection)rules.get(currentRulesKey); } for(Iterator itr = viewRules.iterator(); itr.hasNext(); generate(template)) /*cwele: treba zbog toView() i outcome() odavde, koji se pozivaju template-u: <navigation-case> <from-outcome><XDtFacesNavigation:outcome/></from-outcome> ---poziv outcome() <to-view-id><XDtFacesNavigation:toView/></to-view-id> --- poziv toView() </navigation-case> */ currentRule = (JsfNavigationRule)itr.next(); } public String fromView() { return fromViewId; } public String toView() { return currentRule.getToView(); } public String outcome() { return currentRule.getOutcome(); } public String fromAction(){ return currentRule.getFromAction(); } public String redirect(){ return currentRule.getRedirect(); } /** *Donje 3 funkcije trebaju zbog faces_config_xml.xdt */ public void ifHasFromAction(String template) throws XDocletException { if (currentRule.getFromAction() != null) generate(template); } public void ifNeedRedirect(String template) throws XDocletException { if ((currentRule.getRedirect() != null) && (currentRule.getRedirect().equals("true"))) generate(template); } public void ifNeedFromViewId(String template) throws XDocletException{ if (generateFromViewId) generate(template); } /** cwele: <XDtFacesNavigation:forAllViews> */ public void forAllViews(String template) throws XDocletException { Collection classes = getXJavaDoc().getSourceClasses(); Iterator i = classes.iterator(); do { if(!i.hasNext()) break; XClass clazz = (XClass)i.next(); setCurrentClass(clazz); if(!DocletSupport.isDocletGenerated(getCurrentClass()) && hasRule(getCurrentClass())) { // cwele: uzima sve @jsf.navigation tagove iz neke klase Iterator it = getCurrentClass().getDoc().getTags("jsf.navigation").iterator(); while(it.hasNext()) { XTag tag = (XTag)it.next(); String fromView = tag.getAttributeValue("from"); String toView = tag.getAttributeValue("to"); String result = tag.getAttributeValue("result"); // cwele: String fromAction = tag.getAttributeValue("fromAction"); String redirect = tag.getAttributeValue("redirect"); // by cwele: JsfNavigationRule rule = new JsfNavigationRule(fromView, result, toView); JsfNavigationRule rule = new JsfNavigationRule(fromView, result, toView, fromAction, redirect); /* rules: HashMap koji se pravi u konstruktoru. Za isti from-view-id moze biti vise navigation-case. */ if (fromView != null) { // fromView je zadato i != null: Collection r = (Collection)rules.get(fromView); if(r == null) r = new ArrayList(); r.add(rule); rules.put(fromView, r); }else{ // fromView nije zadato. Svaki takav _jsf.navigation ce da napravi // po jedan navigation-rule sa JEDNIM navigation-case unutra, mislim da je to OK // drugim recima, kljucevi za HashMap 'rules' nece vise biti samo Stringovi, nego // i Integer objekti (a mogao sam odabrati bilo sta sto nije String), // i po tome cu znati treba li da generisem <from-view-id> ili ne Integer key = new Integer(myCounter++); ArrayList ruleHolder = new ArrayList(); ruleHolder.add(rule); rules.put(key, ruleHolder); }// if-else }// kraj obrade za jedan jsf.navigation tag iz source fajla } } while(true);// kraj za pojedinacan .java source fajl for(Iterator it = rules.keySet().iterator(); it.hasNext(); generate(template)){ // cwele: fromViewId treba postaviti zbog: // <from-view-id><XDtFacesNavigation:fromView/></from-view-id> --- poziv fromView() odavde // originalno, ovo je obavezno, pa ako se ne zada, bude NullPOinterException (pukne li ovde ?) Object currKey = it.next(); if (currKey instanceof Integer){ currentRulesKey = (Integer)currKey;// terbace da se u forAllRules() uzme odgovarajuci JsfNavigationRule generateFromViewId = false; }else{// user je zadao fromView generateFromViewId = true; fromViewId = currKey.toString(); } //fromViewId = it.next().toString(); }// for loop }// forAllViews() private boolean hasRule(XClass clazz) { return clazz.getDoc().hasTag("jsf.navigation", false); } private JsfNavigationRule currentRule; private String fromViewId; private HashMap rules; private boolean generateFromViewId; private int myCounter = 0; private Integer currentRulesKey; } -------------- That is it ;-) Janga, Sowjanya wrote: Hi, I have been trying to use xDoclet to generate redirect attribute for jsf navigation. I understood from XDT-1648 that it has been fixed and that the fix is in a CVS version.
<<winmail.dat>>
------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________ xdoclet-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/xdoclet-user
