当对struts2的action进行分包后,如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 开启动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<package name="myPackage" extends="struts-default" namespace="/">
<interceptors>
<interceptor-stack name="myDefaultStack">
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
<!-- =====================Base Start======================= -->
<action name="index" class="cn.mys2sh.web.action.IndexAction">
<result>/jsp/index.jsp</result>
</action>
<!-- <action name="helloWorld" class="helloWorldAction">
<result name="input">/jsp/helloWorld.jsp</result>
<result>/jsp/helloWorld.jsp</result>
</action> -->
</package>
<!-- =====================ADMIN Start======================= -->
<package name="admin" namespace="/admin" extends="myPackage">
<action name="userDetail" class="userAction">
<result name="success">/jsp/userDetail.jsp</result>
</action>
</package>
</struts>
这里有一个admin的命名空间。
jsp页面:
<div id="local" style="width:100px;">
<h3>管理系统</h3>
<ul>
<li><a href="index.do">会员查看</a></li>
<li><a href="admin/userDetail.do">会员注册</a></li>
<li><a href="#">Content page 3</a></li>
<li><a href="#">Content page 4</a></li>
<li><a href="#">Content page 5</a></li>
<li><a href="#">Content page 6</a></li>
</ul>
</div>
这样写之后,每次点击会员注册的链接,命名空间“admin”都会重复出现。
http://localhost:8080/webProject/admin/admin/admin/admin/admin/userDetail.do
解决办法:
在jsp页面添加如下代码:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set var="ctx" value="${pageContext.request.contextPath }"/>
${pageContext.request.contextPath }:可以取得工程的根目录
同是把链接修改如下:
<a href="${ctx}/admin/userDetail.do">会员注册</a>