Struts2.1浅谈
来源:互联网 发布:三维动画软件手机 编辑:程序博客网 时间:2024/05/16 09:35
Struts2.1是一个极度松藕合的web框架。可以完全将view、model、controller分开。在struts2.1中的controller与2.0一样是一个filter,只是所在位置有所不同。在做Struts2的开发时,我们在页面完全可以只用html控件+action(当然这不代表完全不适用struts的扩展标记,比如<s:fielderror><s:actionerror/>s:actionmessage/>这些我们还是要使用的,我个人一般只是用验证处理和格式的标记),这样美工做出来的页面java程序员就可以不必花掉太多的时间去改静态页了。这边文章我只想简单的阐述struts2.1的一些常用、实用的功能和特点。
首先要知道做一个struts2.1的case有几个方面。表示层(jsp页面)、action(model),至于控制器上面已经说过了,基本使用不需要java程序员去写代码。表示层不多说了使用html的控件足够了。我们主要说说model。struts2中的model就是action,model对view的封装原则是根据控件的name属性来对应封装的。举个例子:页面中有个控件<input type="text" name="test" />,那么在action中需要声明一个private String test;的属性与页面的控件对应。那么当页面提交到这个action时就会把name为test控件的值装入action的test属性里。struts2还有一个很好的特性不知道大家有没有注意过,就是可以直接将页面中控件的数据封装入对象属性。如果现在我们有一个Student类,我们现在希望在封装时就把test控件的值装入一个Student对象的test属性中,我们就可以将action的代码改成这样:private Student s;并且将页面控件的name改为s.test。
struts2.1的validation我个人感觉有些多余,使用validate方法就可以了。但是要注意addActionError(),addActionMessage(),addFieldError()的区别。extends ActionSupport后重写validate()方法,对封装的数据进行验证。addActionError()是添加页面中整体的错误,addFieldError()是针对某一个field(即jsp中的控件)添加错误信息,addActionMessage()只是添加消息信息。当然你也可以使用validation。只需要给action配置action-validation.xml文件,在配置文件中添加验证规则即可。例如(字符非空验证):
<field name="test">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>is not null</message>
</field-validator>
</field>
如果页面使用的控件是struts2的扩展标记那么会自动输出错误,如果不是在你想输出错误的位置加上<s:fielderror>或其他验证处理的扩展标记,如果你比我更变态的话你可以创建一个FieldError对象添加错信息,然后在页面中从ValueStack中取出来显示。
如果要说controllor真的不用管的话那要看你看问题的角度了,我认为struts.xml算是暴露给开发人员的最重要部分了。因为核心filter还是要从这个配置文件中去查找映射的。简单说一下配置文件的结构<constant name="" value="">是用来配置struts2框架属性用的,当然这些我们可以分离到struts.properties属性文件中去配置。映射的主要标记有几个:<package>、<action>、<result>、<result-types>、<result-type>、<param>。
package标记是包,有点类似于java中包的概念,但是又不太一样。extends这个属性体现了不同点。一边来说我们都会继承struts-default这个配置文件。但是如果我们的action用于ajax就会继承json-default。namespace是公共映射路径。name属性只是一个标示随意命名就可以了,不过不要重名就好。
action是配置映射用的,存在于package内。name是映射url,class是处理的类,method是处理方法。在stuts2中这里可以很多变很灵活。我们可以再name和method两个属性中使用表达式,例如:<action name="actionMapping!*" class="ActionClass" method="*" ></action>,如果你的页面请求的是actionMapping!test的话那么就叫用ActionClass对象的test方法处理。
result是跳转的配置,在struts2中跳转只需要通过action中方法的返回字符串来决定要跳转到的页面。result有两个属性:name是action返回字符串的值,result标记中的文本是name值对应的跳转页面。type属性是跳转(返回值)方式。
result-types和result-type是跳转(返回值)类型的设置,格式为:
<result-types>
<result-type name="" class=""></result-type>
</result-types>
param是参数、在action、result-type 、result内都可以出现。
浅谈就到这里了。等有时间了,我再写一下struts2.1中框架的属性配置、date封装的处理、拦截器的使用、struts-json等细节方面的文章。最后给个最简单的demo吧。
index.jsp页面:
<c:form name="form1" action="testAction">
<c:textfield name="name" label="姓名"></c:textfield>
<c:submit></c:submit>
</c:form>
TestAction.java:
public class TestAction extends ActionSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void validate() {
// TODO Auto-generated method stub
if(getName()==null||getName().equals(""))
this.addFieldError("name", "error");
super.validate();
}
@Override
public String execute() throws Exception
{
ActionContext.getContext().getValueStack().set("test", "successed!!!!");
return "success";
}
}
struts.xml:
<struts>
<package name="com.struts.action" namespace="/" extends="struts-default">
<result-types>
<result-type name="json" class=""></result-type>
</result-types>
<action name="testAction" method="execute" class="com.struts.action.TestAction">
<result name="success">/MyJsp.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
成功页面MyJsp.jsp:
<body>
${test}
</body>
- Struts2.1浅谈
- 浅谈struts2之chain[1]
- Struts2浅谈
- Struts2浅谈
- 浅谈struts2
- 浅谈Struts2
- 浅谈struts2
- Struts2拦截器浅谈
- 浅谈struts2工作流程
- 浅谈struts2之chain
- 浅谈 struts2+ajax
- 浅谈 struts2 之 chain
- 浅谈struts2……
- 浅谈struts2工作原理
- 浅谈 struts2 web开发
- 浅谈struts2之chain
- 浅谈struts2之chain
- Struts2技术内幕笔记1(web开发浅谈)
- 《软件自动化测试成功之道》节选1 - 选择合适的项目实施自动化测试
- SQL存储过程
- 编译orge1.7.0
- CL 编译
- 几个好的网站
- Struts2.1浅谈
- Loki泛化仿函数
- iPhone开发进阶(10)— 在程序中使用 GPS
- CSS在线优化
- iPhone开发进阶(11)— 多线程的使用与注意事项
- 几种算法
- 了解IBM DB2数据库的备份与恢复
- 杭电动态规划习题
- opencv学习札记