一、一个form多个提交的解决办法
<s:form action="submit.action">
<s:textfield name="msg" label="输入内容" />
<s:submit name="save" value="保存" method="save" />
<s:submit name="print" value="打印" method="print" />
</s:form>
二、自定义类型转换器
如果是局部类型转换器,建立cn.dy.type.conversion,在这个包里面新建一个类。
比如是日期类型的DateTypeConverter,继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter,然后在action所在的包里面建立ActionClassName-conversion.properties,文件里面的内容为:属性名称=类型转换器的全类名。
如果是全局类型转换器,新建转换器代码和局部是一样的,不同之处在于是在WEB-INF/classes下放置Xwork-conversion.properties,而且文件的内容为:需要转换的数据类型=类型转换器的全类名。
全局转换器和局部转换器的不同在于全局转换器要求要转换的格式必须统一,比如说日期,有些是2011-6-20,有些是20110620,最好用局部转换器。
三、struts2访问和添加几个属性
如果仅仅访问和添加则使用下面的方式:
ActionContext ctx=ActionContext.getContext();
ctx.getApplication().put("app","应用范围属性");
ctx.getSession().put("ses","会话范围属性");
ctx.put("req","请求范围属性");
ctx.put("names",Arrays.asList("first","second","third"));
如果要获得站点某个目录的绝对路径,使用下面的方式可以获取:
HttpServletRequest request=ServletActionContext.getRequest();
ServletContext servletContext=ServletActionContext.getServletContext();
request.setAttribute("req","请求范围");
request.getSession().setAttribute("ses","会话范围属性");
servletContext.setAttribute("app","应用范围属性");
servletContext.getRealPath(arg0);
ActionContext.getContext().put("greeting","欢迎来到这里");
然后在结果页面里,从请求对象中取出greeting属性,如下:
${requestScope.greeting}或者<%=request.getAttribute("greeting")%>
${sessionScope.user.username},${requestScope.greeting},${applicationScope.counter}
四、拦截器(重点)
**<package name="manage" namespace="/manage" extends="struts-default">
<!-- 拦截器配置 -->
<interceptors>
<!-- 当有自定义拦截器的时候,struts2提供的默认拦截器就失去作用了 -->
<interceptor name="login" class="cn.dy.interceptor.LoginItcpt" />
<!-- 为了使用默认拦截器,这里定义拦截器栈,把默认拦截器给载入进去 -->
<interceptor-stack name="loginStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="login" />
</interceptor-stack>
</interceptors>
<!-- 为package中所有的action使用拦截器 ,当某个action中有显式拦截器时,这个默认拦截器就不会再运用到那个action中-->
<!-- <default-interceptor-ref name="loginStack" /> -->
<!-- 拦截器结果页面,最好设成全局 -->
<global-results>
<result name="result">/WEB-INF/manage/result.jsp</result>
</global-results>
<action name="go_*" class="manageAction" method="{1}">
<result name="input">/index.jsp</result>
<interceptor-ref name="loginStack" />
</action>
</package>**
当有多个配置文件时,每个都要单独加拦截器,因为拦截器标签是在<package>里面的