正文索引[ 隐藏 ] ★Struts2开发步骤 1.加载struts2类库 2.配置web.xml 3.开发视图层页面--hello.jsp 4.开发控制层Action--HelloAction.java 5.配置struts.xml 6.部署、运行项目。 ★错误归纳 1.struts.xml的位置问题。 2.Action接受参数的问题。 3.There is no Action mapped for namespace / and action name UserAction 4. ognl.OgnlException: target is null for setProperty(null, "name", [Ljava.lang.String;@346633b5) ★Struts2开发步骤 最生动的莫过于实例,看代码是学习编程的最好途径。 1.加载struts2类库 【点击下载】,复制到/WEB-INF/lib下。 2.配置web.xml <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 3.开发视图层页面--hello.jsp <h1>Welcom!</h1> <div> <h1> <!-- 显示Struts Action中message属性内容 --> ${message} </h1> </div> <hr /> <div> <form action="HelloGo.action"> 请输入您的姓名: <input name="user.name" type="text" /> <input type="submit" value="提交" /> </form> </div> 【注意】:12行中使用user.name是因为我把name封装在类UserInfo里,调用时必须加上对象名user。 4.开发控制层Action--HelloAction.java public class HelloAction { private String message; private UserIf user; ...//message和user的set,get方法 public String execute() { this.setMessage("你好,"+this.user.getName()+"!"); return "success"; } } 【注意】:此处的user必须是和hello.jsp页面中的name的属性前缀相一致的。如果改变,则需要两者同时改变,并且特别注意一点:Action类里的封装类的set和get方法千万不要忘记更新,不要只顾着修改变量名称,而忽略了set、get方法名。我就是经常忘记修改set、get方法名,而导致出现一个错误ognl.OgnlException: target is null for setProperty(null, "h.name", [Ljava.lang.String;@346633b5),后面再说。 5.配置struts.xml 首先,如果没有struts.xml,则要在src目录下新建。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts./dtds/struts-2.1.7.dtd"> <struts> <package name="jzl" extends="struts-default"> <action name="HelloGo" class="com.action.HelloAction"> <result name="success">hello.jsp</result> </action> </package> </struts> 【注意】: ⑴dtd文件的引入,可以从struts2-core-xxxx.jar包里找到dtd文件,打开后,找到里面的引用粘贴过来即可。我这里用的是struts-2.1.7.dtd。 ⑵说一说这里面的一些对应名:①<action>里HelloGo是与jsp前台页面中<form>中action属性的名称相同的。②class的值是前台页面所要转向的Action类,记得在没有用Spring的时候要带着类的全名。③<result>中success是和Action类中默认方法execute的返回值相同的。 ⑶整个配置的含义:配置一个包,package名为“XXX”,必须继承“struts-default”,否则调用不到struts提供的interceptor和result节点等等。把JSP页面中的action转向到Action类里,例如把名为HelloGo.action转向到com.action.HelloAction类,这个过程同时把数据封装了传递过来。当处理完毕后,Action类中execute方法返回值为设定的匹配字符(例如"success")时,将把页面转向到某一个页面(例如hello.jsp)。 6.部署、运行项目。 根据异常来判断错误,下边就说说我碰到过的各种错误。 ★错误归纳 1.struts.xml的位置问题。 struts.xml要放到src/下,这个得从struts2的控制器org.apache.struts2.dispatcher.FilterDispatcher上说,这个类默认的是导入/classes 下的struts.xml,所以只有放在src/下编译才能在/classes下,不过可以通过修改web.xml,在<filter>标签内加入如下代码,这样struts.xml就可以放在/WEB-INF下了。 <init-param> <param-name>config</param-name> <!-- 配置装载struts.xml路径,其中struts.xml放在/src/struts/下--> <param-value>struts-default.xml,struts-plugin.xml,../struts.xml</param-value> </init-param> 2.Action接受参数的问题。 Struts2中Action接收参数的方法主要有以下三种: (1).使用Action的属性接收参数: a.定义:在Action类中定义属性,创建get和set方法; b.接收:通过属性接收参数,如:userName; c.发送:使用属性名传递参数,如:user1!add?userName=Magci; (2).使用DomainModel接收参数: a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法; b.接收:通过对象的属性接收参数,如:user.getUserName(); c.发送:使用对象的属性传递参数,如:user2!add?user.userName=MGC; (3).使用ModelDriven接收参数: a.定义:Action实现ModelDriven泛型接口,定义Model类的对象(必须new),通过getModel方法返回该对象; b.接收:通过对象的属性接收参数,如:user.getUserName(); c.发送:直接使用属性名传递参数,如:user2!add?userName=MGC 我们平时用的最多的就是第二种方式,即创建单独的entity类,action类里声明entity类的对象,带有get、set方法,接受的时候用对象来调用,jsp发送数据的时候用同名的对象名做前缀调用。 此部分更详细说明请看:struts2中action接收参数的方法 3.There is no Action mapped for namespace / and action name UserAction 找不到与之相匹配的Action,一般来说这个错误原因有两种: (1)检查struts.xml是否在src目录下。 (2)检查struts.xml语法是否正确。如果(1)没问题,则肯定是在语法问题上。比如extends="struts-default"是否写错了,不要忽略,小编当时就是写错了default词语;查看文件名是不是struts.xml;根据上述5. 配置struts.xml下(2)内容自行对照各名称是否相同。 4. ognl.OgnlException: target is null for setProperty(null, "name", [Ljava.lang.String;@346633b5) 这是个关于Jsp和Action传递参数时的错误。检查的文件有jsp页面文件、Action类。 (1)检查jsp页面中的name属性是否正确,如果是按封装类传递参数,则检查前缀是否和Action类中声明的对象名相同。 (2)如果(1)没有问题,则检查Action类中的声明对象有没有添加set和get方法。同时检查一下set和get方法的语法是否正确。 …… 以上就是小编通过做一个简单实例,学习到的struts使用方法和错误总结,更加深入的学习还会继续。 原文链接:http://www./iq/javac/struts2.html |
|