2008-11-12 9 views

Répondre

1

Je pense que dans le code de balise, vous pouvez examiner l'objet de requête et son URL, et déterminer la page à partir de cela.

+0

L'objet de requête fonctionnerait si cela était une page JSP régulière, mais dans le fichier d'étiquette l'objet de la demande ne sont pas disponibles. – timdisney

2

Il s'avère que l'objet de requête est réellement disponible, mais uniquement dans la partie EL d'une variable. Donc, cela fonctionnerait:

<form action="${pageContext.request.requestURI}"> 

Mais pas:

<form action="<%=request.requestURI%>"> 

Ou ceci:

<form action="<%=pageContext.request.requestURI%>"> 
1

Il est possible d'accéder à la demande à partir du fichier d'étiquette, via l'organe pageContext variable.

public class YourTag extends TagSupport { 
    public int doStartTag() throws JspException { 
     HttpServletRequest req = (HttpServletRequest) pageContext.getRequest(); 
     String pathInfo = req.getPathInfo(); 
0

L'objet de requête est disponible dans l'étiquette. Cela n'a pas d'importance si vous utilisez une classe ou un fichier de tags. Dans les fichiers de balises, il est disponible dans les scriptlets Java ainsi que dans EL. Cependant, il est disponible en tant qu'objet ServletRequest et non en tant qu'objet HttpServletRequest (dans EL, la classe de l'objet n'a pas d'importance, mais c'est le cas dans les scriptlets). En outre, dans vos scriptlets, vous devez accéder à la méthode complète, pas seulement à un nom de propriété. Donc, votre code est censé être:

<form action="<%= pageContext.getRequest().getRequestURI() %>"> 

mais même cela ne fonctionnera pas parce que getRequestURI() est une méthode de HttpServletRequest [1], et non de ServletRequest. Utilisez soit EL, soit utilisez des scriptlets plus longs dans votre fichier de balise et lancez l'objet de requête.

[1] http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpServletRequest.html#getRequestURI()

Questions connexes