5

我有网址: http ://demo.lendingclub.com/account/summary.action 。当访问这个 url 时,它会首先进入拦截器类中的身份验证拦截器,如果我使用:

String uri = req.getRequestURI();

它会回来/account/summary.action

但是如果我在jsp中使用它:

<%
    HttpServletRequest req = ServletActionContext.getRequest();
    String uri = req.getRequestURI();
%>

它会返回:/mainapp/pages/account/summary.jsp

为什么它们不同,如​​何在 JSP 中获取操作 URL?

4

2 回答 2

6

获取当前操作 url 的最简单方法是:<s:url/>如果您提供命名空间和操作参数,您可以将其指向其他操作,但如果没有这些参数,则默认为当前 url。

于 2013-05-22T04:58:04.437 回答
2

如果将属性设置为操作,则可以获取操作 URL 或任何其他值,然后通过 OGNL 从值堆栈中检索该属性。

private String actionURL;

public String getActionURL(){
  return actionURL;
}

计算操作 URL 的代码与您在评论中发布的代码相似

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。

于 2013-05-21T09:07:52.280 回答