Deux pages JSF/JSF et des beans gérés associés dans deux projets distincts (éventuellement des serveurs différents) Nommez-les PageA.jsp et PageB.jsp avec BackingBeanA.java et BackingBeanB.java (encore une fois, projets distincts)Transfert de données entre pages JSF dans des projets distincts
Desire est de rediriger de PageA.jsp à PageB.jsp et passer un objet (FilterData)
Ce qui suit a été essayé:
BackingBeanA.java
public String startPageB() {
try {
FilterData filterData = ...
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)
facesContext.getExternalContext().getRequest();
request.setAttribute("FILTERDATA",filterData);
ExternalContext externalContext = facesContext.getExternalContext();
externalContext.setRequest(request);
externalContext.redirect("http://localhost:8080/PageB/");
}
catch (IOException e) {
e.printStackTrace();
System.out.println(e);
}
return "redirectedData";
}
BackingBeanB.java (dans un projet distinct, pourrait être serveur distinct)
public String getBeanAData() {
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest)
facesContext.getExternalContext().getRequest();
FilterData newFilterData = (FilterData)
request.getAttribute("FILTERDATA");
... do stuff
return null;
}
Résultat: getBeanAData est appelé, cependant: filterData n'a pas été nulle dans BackingBeanA, mais était nulle dans BackingBeanB - données n'a pas été transféré.
Des idées sur la façon de faire correctement ce passage de données?
Ce que j'aurais inclus dans la question initiale:
Java 1.6.0_22-b03 JSF 1.2 JSTL 1.2 Eclipse 3.6.0 (Helios) Tomcat 6.0.28 (doit exécuter également sur Weblogic) IE 7.0.5730.13 Firefox: 3.6.12
tentative est d'être pur JSF si possible, pas HTTP désiré (mais possible), pas JavaScript (période).
Comment je résolu le problème (assez bon pour l'instant):
De page Web parent -
...
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
String initialUrl = externalContext.getInitParameter("RedirectUrl");
String requestDataA = "?ValueA=" + activity.getID();
String requestDataB = "&ValueB=" + activity.getName();
redirectUrl = initialUrl + requestDataA + requestDataB;
externalContext.redirect(redirectUrl);
...
De page Web redirigé -
...
String ownerName = (String) FacesContext.getCurrentInstance().
getExternalContext().getRequestParameterMap().get("ValueB");
String itemId = (String) FacesContext.getCurrentInstance().
getExternalContext().getRequestParameterMap().get("ValueA");
...
Le résultat est que cela fonctionne très bien - pour les cordes. C'est OK pour le moment.
Ce que je voudrais pour plus tard, si possible:
The same thing, but passing an object.
I know I cannot do that on the request line, but I thought there was a way
similar to a standard HTTP setup where a request attribute is set and the
destination page gets it with a doPost method (do I have this wrong?).
The BalusC answer indicates this is not possible.
So is it really not possible to have a JSF page redirect (starup or whatever)
to an external page, and pass it an object without going to shared storage?
Merci, John
Avec "projets distincts" vous ainsi dire en fait "contextes webapp séparés"? – BalusC