Struts2的namespace问题探讨

想快速解决问题直接看标红部分
被误导了很多次才在网上找到个正确的说法,学习真的不能想当然,没有试验就没有发言权,就更不要以大神的姿态去发帖误导别人!


1. namespace和 java包(也就是概念上的命名空间)没有半毛钱关系,前者是逻辑路径,后者是物理路径,不要再讲xml配置中的namespace和name两个看成是映射的键值对,这样
就走入误区了。
2.namespace 仅仅对 页面的url定向有意义,也就是说它是为url而存在的,namespace的值是什么就要在form表单的action名字之前拼上什么。不要奢望用name来代表这个值。
3.意义何在?
    例如:
    <action name="logon" class="com.ebbs.action.LoginAction">  
          <result name="ERROR">/jsp/failed.jsp</result>  
          <result name="SUCCESS">/jsp/success.jsp</result>  
      </action> 
     <action name="logon" class="com.ebbs.action.Login2Action">  
          <result name="ERROR">/jsp/failed.jsp</result>  
          <result name="SUCCESS">/jsp/success.jsp</result>  
      </action> 
如果我有两个Action想要用一个name表示,都要叫logon这个名字,这样就会冲突,服务器不知道要读哪一个,这样我们就在逻辑上将多个aciton划分成几个命名空间,也就是写多个
<package name="" namespace="" ></package>,我们只需在提交form时在url中指定要在哪个逻辑路径中的logon就好。那name既然不能作为namespace的key用于url,它
是干什么用的呢?很简单,我在一个xml中定义多个package,总不能名字都一样吧——here is the reason。
4.example:
struts.xml
 <package name="eaction" namespace=" /com/ebbs/action" extends="struts-default" >
      <action name="logon" class="com.ebbs.action.LoginAction">  
          <result name="ERROR">/jsp/failed.jsp</result>  
          <result name="SUCCESS">/jsp/success.jsp</result>  
      </action>
 </package>
form:
<form action=" com/ebbs/action/logon.action" method="post"> 
*注意 :namespace的定义中有“/”代表从项目的根目录开始,否则是从服务的根目录开始。而路径中不加“/”代表从项目根目录开始,否则从服务根目录(webapp下)开始。

5.example一个蛋疼的例子,可以不看。
<package name="eaction" namespace="/com/ebbs/action" extends="struts-default" >
  <action name="logon" class="com.ebbs.action.LoginAction">  
          <result name="ERROR">/jsp/failed.jsp</result>  
          <result name="SUCCESS">/jsp/success.jsp</result>  
      </action>
      <action name="logon2" class="com.ebbs.action.LoginAction">  
          <result name="ERROR">/jsp/failed.jsp</result>  
          <result name="SUCCESS">/jsp/success.jsp</result>  
      </action>
 </package>
 <package name="eaction" namespace="/com/ebbs/action" extends="struts-default" >
  <action name="logon" class="com.ebbs.action.LoginAction2">  
          <result name="ERROR">/jsp/failed.jsp</result>  
          <result name="SUCCESS">/jsp/success.jsp</result>  
      </action>
      <action name="logon3" class="com.ebbs.action.LoginAction3">  
          <result name="ERROR">/jsp/failed.jsp</result>  
          <result name="SUCCESS">/jsp/success.jsp</result>  
      </action>
     </package>
以上的会报错,这是显而易见的,但是会有几处错误?
导致错误的共有两点:
1.package的name不能相同,
2.但是我们发现名字改了之后,两个packge的同名action会报错,那还要命名空间何用,所以我们容易想到即使name不同,namespace也不能相同,改过namespace之后错误消失。
    这时我们可以使用同一个aciton名(不同namespace中)来表示不同的action了。

浪费了好长时间,不知道这么较真值不值得,但心里就是不甘心遇到问题为了简简单单的节省时间就绕过去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值