【问题标题】:How to get action url in jsp using Struts 2如何使用 Struts 2 在 jsp 中获取操作 url
【发布时间】:2013-05-15 22:23:16
【问题描述】:

我有网址: http://demo.lendingclub.com/account/summary.action。 访问这个url时,会先到authenticate interceptor,在拦截器类中,如果我使用:

String uri = req.getRequestURI();

它将返回/account/summary.action

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

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

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

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

【问题讨论】:

  • 有一个解决方案:String namespace = ServletActionContext.getActionMapping().getNamespace(); String action = ServletActionContext.getActionMapping().getName(); uri = namespace + "/" + action + ".action"; 但我觉得太复杂了!!
  • &lt;s:url value="/" /&gt; - stackoverflow.com/q/15755583/1700321
  • @AleksandrM 不错,但它仍然可以更短;)
  • @Quaternion:是的,如果需要操作 url,那么它应该是 &lt;s:url /&gt;
  • 我知道他们为什么不同:

标签: java jsp struts2 request


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    private String actionURL;
    
    public String getActionURL(){
      return actionURL;
    }
    

    计算操作 URL 的代码与您发布到 cmets 的代码相似

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-02-18
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多