我有网址:http://demo.lendingclub.com/account/summary.action。 访问此网址时,它将首先转到拦截器类中的 身份验证拦截器 ,如果我使用:
String uri = req.getRequestURI();
它将返回/account/summary.action
但是如果我在jsp中使用它:
<%
HttpServletRequest req = ServletActionContext.getRequest();
String uri = req.getRequestURI();
%>
它将返回:/mainapp/pages/account/summary.jsp
为什么它们不同,我如何在JSP中获取操作URL?
答案 0 :(得分:6)
获取当前操作url的最简单方法是:<s:url/>
如果提供命名空间和操作参数,则可以指向其他操作但没有这些参数则默认为当前操作网址。
答案 1 :(得分:2)
如果将属性设置为操作,则可以获取操作URL或任何其他值,然后通过OGNL从值堆栈中检索该属性。
private String actionURL;
public String getActionURL(){
return actionURL;
}
计算操作网址的代码与您发布到评论
的类似public String getPath(){
ActionProxy proxy = ActionContext.getContext().getActionInvocation().getProxy();
String namespace = proxy.getNamespace();
String name = proxy.getActionName();
return namespace+(name == null || name.equals("/") ?"":("/"+name));
}
此代码不支持.action
扩展名,如果您需要将扩展名添加到路径,则需要相应地修改此代码。
然后写下你的行动方法
public String excute() {
actionURL = getPath();
...
return SUCCESS;
}
JSP中的
<s:property value="%{actionURL}"/>
您已使用调度程序结果将请求转发给JSP,因此您获得指向JSP位置的URI。