為什麼struts2 action處理後返回到介面css效果都不起作用

edagarli發表於2013-11-02

在使用struts2的action執行後跳轉到的jsp顯示的時候其中的css不起作用,就拿我現在出問題的project為例:

action如下:

  <action name="listUser" class="listUserAction">
                <result>/users/userList.jsp</result>
         </action>

(注:listUser的作用就是查出所有的使用者,然後交給users下的userList.jsp顯示出來。由於採用了spring,此處的"listUserAction"是applicationContext.xml中配置的名稱)

userList.jsp中的css設定如下:
               <link href=“../css/style.css" rel="stylesheet" type="text/css" />

(注:目錄層次是這樣的,WebRoot下有users和css資料夾,所以users下的jsp要呼叫style.css需要../到根目錄,然後找css資料夾)

但是當程式從listUser執行成功後跳轉到/users/userList.jsp時出現了/css/style.css不起作用的情況,如果直接在位址列直接顯示jsp又能正常顯示了。

在網上找到的方法說css用絕對路徑:

       <link href="<%=rootPath %>/css/style.css" rel="stylesheet" type="text/css" />

但是這樣會有一個很明顯的弊端,那就是移植性變差。

嘗試將result改為<result>userList.jsp</result>,然後將jsp放在根目錄下就沒有這種問題了,這時候問題的原因就知道的差不多了,那就是action是在根目錄下的,在執行程式的時候從位址列可以看到,就是說名稱空間是在根目錄,這時候再"../css/style.css"自然就找不到了。

 

明白了問題所在,解決方法就不難找了。找到listUser的配置所在的package,加上這樣一句namespace="/users"。這時候就是

<?xml version="1.0" encoding="UTF-8"?>
       <!DOCTYPE struts PUBLIC  "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
                                "http://struts.apache.org/dtds/struts-2.1.dtd">
  
       <struts>
               <package name="users" extends="struts-default" namespace="/users">

       ......

          <action name="listUser" class="listUserAction">
                        <result>/users/userList.jsp</result>
                 </action>

      ......

       </package>

</strusts>

然後從新啟動伺服器,OK,顯示正常!同時我們也看到位址列中action前多了個"/users",跳轉到接視訊中也是"/users/userList.jsp",這樣就保持了一致,問題也就解決了。



相關文章