paramètre dans l'URL jsf2
J'ai besoin d'avoir ce lien:
http://myserver:/myproject/innerpage/clip.jsf&id=9099
pour extraire l'id à partir d'un code comme ceci:
HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String clipId = request.getParameter("id");
Lorsque je l'exécute sur tomcat-je obtenir:
message
/OnAir/innerpage/clip.jsf&id=9099description La ressource demandée
(/OnAir/innerpage/clip.jsf&id=9099)
n'est pas disponible.
Quand je le lance sans &id=9099 il court tout droit.
Comment puis-je le faire fonctionner?
OriginalL'auteur Dejell | 2010-07-28
Vous devez vous connecter pour publier un commentaire.
Le caractère de séparation entre le chemin et la chaîne de requête dans l'URL est
?
, pas&
. Le&
est caractère de séparation pour plusieurs paramètres de chaîne de requête, par exemplename1=value1&name2=value2&name3=value3
. Si vous omettez le?
, puis la chaîne de requête sera considérée comme faisant partie de chemin dans l'URL, ce qui conduira à une erreur HTTP 404 page/ressource pas trouvé d'erreur que vous avez rencontré.Donc, ce lien devrait fonctionner http://myserver:port/myproject/innerpage/clip.jsf?id=9099
Cela dit, il ya une bien meilleure façon d'accéder aux paramètres de la requête. Définir comme une propriété gérée avec une valeur de
#{param.id}
.EL
#{param.id}
vous renvoie la valeur derequest.getParameter("id")
.Un conseil: si vous avez besoin de transporter le "raw" Servlet API sous le JSF hottes à l'intérieur d'un managed bean, demandez-vous toujours (ou ici): "n'est-il pas JSF-ish?". La grande chance que vous êtes de surcharger inutilement les choses 😉
Vous êtes les bienvenus. Non, vous avez juste à commencer quelque part. J'ai fait la même erreur il y a 10 ans. Apprenez de vos erreurs. En souvenir chaque fois que vous rencontrez le même problème à nouveau des symptômes. Les enseignements sont précieux pour l'avenir.
En fait, il ne serait pas travailler pour moi. Mon haricot portée de vue et j'ai le méchant exception: Le champ d'application de l'objet référencé par l'expression #{param.id}, demande, est plus courte que la référence géré haricots (clipBean) portée de vue
Si vous voulez traiter de demande paramètres chaque demande, votre bean devrait logiquement être demande étendue. Vue l'étendue de haricot n'est pas construit sur chaque demande. Peut-être que vous tenez à votre "hack" ou créer une demande distincte d'étendue de haricot et d'injecter de la vue étendue dans la nouvelle portée de la requête bean.
OriginalL'auteur BalusC
Vous devez d'abord nous montrer comment vous envoyer le paramètre dans votre JSF, est-il un bouton de commande/Lien? Un outputLink? Un ? Aussi êtes-vous à l'aide de redirect=true?
Les Chances sont que vous sont en train de perdre l'id quelque part au cours de la demande.
OriginalL'auteur Mateusz Dymczyk