一、struts.xml中的包和命名空间
1、Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间。
如果在配置<package>的时候没有指定namespace属性,则该包下的所有Action处于默认的包空间下
2、例如:
<package name="lee" extends="struts-default">
<action name="login" class="org.crazyit.app.action.LoginAction">
<!-- 定义三个逻辑视图和物理资源之间的映射 -->
<result name="input">/login.jsp</result>
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
对于这里的package,定义了name属性,未定义命名空间,则该Action处理的URL为:localhost:8080/项目名/login.action
<package name="lee" extends="struts-default" namespace="/book">
<action name="login" class="org.crazyit.app.action.LoginAction">
<!-- 定义三个逻辑视图和物理资源之间的映射 -->
<result name="input">/login.jsp</result>
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
对于这里的package,定义了namespace命名空间,则该Action处理的URL为:localhost:8080/项目名称/book/login.action
注意顺序:①如果请求为/book/login.action,系统首先会查找/book命名空间下的login.action,如果找不到,则会在默认的命名空间查找login.action
②如果请求为/login.action,系统会在跟命名空间(”/“)查找名为login.action,如果找不到,就会转入默认的命名空间
二、使用动态方法调用Action
在一个登陆页面,包含有”登陆“和”注册“两个按钮,如果我们点击了”注册“,我们可以利用javascript来改变form表单的action