jstl里的<c:url>标签可以返回web app的根url 加上请求的资源,
   比如在任意jsp文件里:<c:url value="/home.action"/>返回的是http://localhost/appname/home.action为什么struts2里的<s:url>标签返回的url不正确
   比如当前的browser的地址栏里的url 是http://localhost/appname/user/test.action
jsp文件里用<a href="<s:url action="home.action" namespace="admin"  />">我希望正确返回的是
http://localhost/appname/admin/home.action,但实际产生的是http://localhost/appname/user/admin/home.action
,为什么

解决方案 »

  1.   

    试试这样
    <a   href= " <s:url   action= "../home.action "   namespace= "admin "     /> "> 
      

  2.   

    试下
    <a ref="<s:url action="/home.action" namespace="admin"/>">   
      

  3.   

    试出来了,应该这样写:<a href="<s:url action="../admin/home.action" />">可是这样写不爽,如果当前url是/appname/user1/user2/user3/xx.action,那我在s:url里难道要写几个../../..???
    jstl里的c:url标签不管当前url是哪里,只要<c:url value="/admin/home.action"/>就可以把value值加在根url后加
    上,而不要写什么../
      

  4.   

    最好是不用相对路径,因为你不确定当然请求是从哪个action forward过来的(如果有多个action可以forward过来),而不同的action又有可能是在不同的路径下,客户的请求是对action的,所以当前路径也是对于action的。url 如下用更清楚吧。<s:url value="your url" var="urlname">
      <s:param ....>
      ...
    </s:url><a href='<s:out value="urlname"/>'/>
      

  5.   

    我就是不想用相对路径!但<s:url 怎么输出的不是我想要的结果?
    假如当前浏览器里的url 是http://localhost/appname/user/home.action
    那我在jsp文件里写<s:url value="/admin/test.action"/>
    我希望输出的是http://localhost/appname/admin/test.action,
    但实际输出的是http://localhost/appname/user/admin/test.action,
    加在了user后面,而没有加在appname/后面,为什么?
      

  6.   

    既然楼主在JSTL里写<c:url   value= "/home.action "/>
    为什么不在STRUTS里也写<s:url   action= "/home.action "   namespace= "admin "/>
    ??
      

  7.   

    这样写<s:url       action=   "/home.action   "       namespace=   "admin   "/> 
    输出的也是http://localhost/appname/user/admin/test.action