使用struts2跳转后css和js失效的解决方式
根据观察,主要是由于通过action跳转后的url会根据命名空间,自动跳转到命名空间子目录,使得当前引用的css和js查找不到,从而失效,根据这个原因,可使用五种办法解决:
1. 使用struts成功跳转后CSS样式失效,我去这是一个很严重的问题啊,于是就百度,各种脑补知识,原来是路径的问题,解决方法也好多(有:namespace,该引用css路径 等),都很费劲,又改动太大,最后找到解决方法所在 只有把Struts中<result>属性改一下即可改为redirect。即可
如下面我所添加的红色代码即可!
<result name="success" type="redirect">guanli.html</result>
<pre name="code" class="java"><span style="color:#333333;"><struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<!-- 声明包 -->
<package name="myPackage" extends="struts-default">
<!-- 定义action -->
<!-- 管理员进行操作 结果集 -->
<action name="YongHu" class="net.jiaxiang.action.YongHuDenRu">
<!-- 管理员登陆成功 映射页面 -->
<result name="success" type="redirect">guanli.html</result>
<!-- 管理员登陆失败 映射页面 -->
<result name="error" type="redirect">YeMian_ZiYuan/ChuCuo/shibai/yonghu.html</result>
</action>
</package>
</struts></span>
1.使用struts2.xml文件中配置文件的配置,通过修改result的type使得url重定向,result默认的是dispatcher,是服务器中的跳转,使用redirect可以使得客户端重新得到一个新的url,这样url会是上一次目录,可以查找到css和js,但是这种办法有一种特别不好的地方,每次跳转需要把数据保存到session中,对于开发来说是不可取的,它会重新创建一个action,使得上一个action中的数据无法使用,不建议采用。
2.由于url的原因使得css和js查找不到,我们可以把引入的css和js加入进一步地址比如说:以前的地址是< link href= "../style.css" rel="stylesheet" type="text/css" /> 可以修改为< link href= "../../style.css" rel="stylesheet" type="text/css" />这样网页就可以直接查询到自己的外部样式表了。
3.将struts2.xml命名空间改写为“/”,不再使用自定义的命名空间,比如说“/admin”。
4.使用jsp网页中的basePath是项目的根路径不过需要在其下加入子目录,因为本身的basePath是属于根路径,需要下面的子目录,比如说在admin子目录下:String basePath = request.getScheme()+"://" +request.getServerName()+":"+request.getServerPort()+path+ "/admin/"