学习struts2心得

一、基本配置 
1、配置web.xml,复制到项目的WebContent/WEB-INF/web.xml文件中就可以了
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <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>

</web-app> 
2、配置 lib,将struts核心类库导入WEB-INF\lib中;需要下载struts2的核心类包
3、
3、  jsp文件头的格式(如果用到标签类的话),直接复制吧,直接写容易报错,这点我也很郁闷呀
 <%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="utf-8"%>
 <%@ taglib prefix="s" uri="/struts-tags"%> 

4、配置struts.xml 




<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
 </struts> 

5、非必须配置,xxx-validation.xml(验证数据时用的)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
    <field name="requiredString">
        <field-validator type="reequiredstring">
            <message> This string is required 必填字段</message>
        </field-validator>
    </field>
</validators>

6、下载json
http://code.google.com/p/jsonplugin/downloads/list

7、HibernateDaoSupport问题
需下载spring-framework-3.0.5.RELEASE,将dist文件下的org.springframework.orm-3.0.5.RELEASE.jar复制到lib目录下,然在项目中build Path导入此目录下的org.springframework.transaction-3.0.5.RELEASE.jar包

二、注意事项
1、jsp文件中标签s中的action名,要与struts.xml文件中个的action名一致
xx.jsp文件中的语句
<s:form action="submit"> 

<s:form action="submit.action"> 

struts.xml文件中个语句,注意此时package没有namespace
  <package name="action"  extends="struts-default">
         
         <action name="submit" class="action.MoreSubmitAction" >
             <result name="save">/result.jsp</result>
             <result name="print">/result.jsp</result>
         </action>         

否则报错. 

2、jsp访问action类的成员变量值

ActionSupport子类的成员变量
        private String message;

jsp中访问数据代码
    <s:property value="message"/> 

3、jsp访问action类中request对象传递的值

ActionSupport子类
      request.setAttribute("result","成功保存["+msg+"]");

jsp中访问数据代码
       <h1>${result}</h1>   

4、struts.xml中action访问同一jsp页面
<action name="List" class="action.BookAction" method="list">
             <result>List.jsp</result>        
</action>
 <action name="Remove" class="action.BookAction" method="remove">
             <result type="redirect">List.action</result>             
         </action> 

5、链接到action中的方法
action中代码
public String remove(){
  if(null!=isbn){
   dao.removeBook(isbn);
  }
  else{
   dao.removeBooks(isbns);
  }
  return SUCCESS;
 }

struts.xml代码
  <action name="Remove" class="action.BookAction" method="remove">
             <result type="redirect">List.action</result>        
         </action>

jsp文件中代码
<a href='<s:url  action="Remove"><s:param name="isbn" value="isbn"/></s:url>'>Delete</a> 

6、struts2的参数传递问题
set的第一个字母要求是大字的,否则struts2没办法找到,getXXX方法也是一样的道理

jsp文件中代码
<s:param name="id" value="id"/>

action中代码
public String getId() {
  return id;
 }
 public void setId(String id) {
  System.out.println("setid");
  this.id = id;
 }
  

7、 struts2中form提交到action中的中文参数乱码问题解决办法  

jsp页面想action提交中文参数时,容易产生乱码,解决方法
在struts.xml文件中,加入下面一句话,主要这里一般是GBK,其他的编码格式都不对
<struts>
    <constant name="struts.i18n.encoding" value="GBK"/>

使用json 时,配置是“UTF-8“
<struts>
    
<constant name="struts.i18n.encoding" value="UTF-8"/>


 

8、action中使用自定义类的成员变量
自定义person类

 
public class Person {
 private String name;
 private String classes;
 private String score;
 private int id;

action类中
 Person person;
 public Person getPerson() {
  
  return person;
 }
public void setPerson(Person person) {
  
  this.person = person;
   
 }

jsp文件中代码
<s:textfield name="person.score"/>

可以将jsp页面的值传入到action


9、jsp遍历数组

自定义book类
public class Book {
 private String isbn;
 private String title;
 private double price;


action中代码,这里的 Collection其实也可以用List代替,这里的books必须先给他赋值

private Collection<Book> books;
public Collection<Book> getBooks() {
  return books;
 }
 public void setBooks(Collection<Book> books) {
  this.books = books;
 }
//books赋值
public String list(){
  books=dao.getBooks();
  return SUCCESS;
 }

jsp页面代码
 <s:iterator value="books">
     <tr>
      <td><input type="checkbox" name="isbns"
       value='<s:property value="isbn"/>' /></td>
      <td><s:property value="isbn" /></td>
      <td><s:property value="title" /></td>
      <td><s:property value="price" /></td>
      <td><a
       href='<s:url action="Edit"><s:param name="isbn" value="isbn"/></s:url>'>Edit</a>
       &nbsp;
       <a href='<s:url  action="Remove"><s:param name="isbn" value="isbn"/></s:url>'>Delete</a>
        
       </td>
       </tr>
    </s:iterator>


10、”#“主要的三种用途
1)访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:

名称

作用

例子

parameters

包含当前HTTP请求参数的Map

#parameters.id作用相当于request.getparameter(id);

request

包含当前HttpServletRequest的属性(attribute)map

#request.userName相当于request.getAttribute(userName)

application

包含当前应用的servletContext属性(attribute)map

#application.userName相当于application..getAtttibute(userName)

attr

用于按request>session>application顺序访问其属性(attribute

#attr.userName相当于顺序在以上三个访问内读取userName属性,直到找到为止



 


2)用于过滤盒投影(projecting)集合,如books.{?#this.price<100}
 (3)构造Map,#{ 'foo1:'bar1:'foo2':'bar2'}

11、”%“的用途

“%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值,例如在Ognl.jsp中加入以下代码:

<hr/>

<h3>%的用途</h3>

<p><s:url value=#foobar[fool]/></p>

<p><s:url value=%{#foobar[fool]}/></p>
 

12、$用两个用途

用于在国际化资源文件中,引用OGNL表达式:

在Struts2配置文件中,引用OGNL表达式,如

<action name=AddPhoto class=addPhoto>

<interceptor-ref name=fileUploadStack/>

<result type=redirect>ListPhotos.action?albumId=${albumId}</result>

</action>
 

13、遍历OGNL选择集合
自定义类
public class Student {
 private String name;
 private int age;
 private int score;
 public Student(){
  
action中代码
 private List<Student> stus=new ArrayList<Student>();
stus.add(new Student("zxx",23,63));
  stus.add(new Student("wangwu",19,60));
  stus.add(new Student("zaoli",26,87));
  stus.add(new Student("xuke",22,57));
  stus.add(new Student("aihua",21,98));

jsp文件中变量选择集合列表
<s:iterator value="stus.{?#this.age>22}">
  <li><s:property value="name"/></li>

</s:iterator> 

注:
 stus.{?#this.age>22} :返回大于22的所有学生的列表
stus.{^#this.age>22} :返回第一大于22的学生列表
stus.{$#this.age>22} :返回最后一个大于22的学生别列表

 
14、jsp页面动态添加节点

<%@ page language="java" import="java.util.*" contentType="text/html; charset=gb2312"
    pageEncoding="utf-8"%>
<html>
<head>
 <script language="javascript">
 function addComponent(){  
  var uploadHTML=document.createElement ("<input type='file' name='upload'/>");
  document.getElementById(" files").appendChild(uploadHTML);
  uploadHTML=document.createElement("<p/>");
  document.getElementById("files").appendChild(uploadHTML);
 }
 </script>
</head>
<body>
<input type="button" οnclick="addComponent()" value="添加文件"/>
<br/>
<form οnsubmit="return true;" action="uploadmore.action" 
method="post" enctype="multipart/form-data">
<span  id="files">
<input type='file' name='upload'/>
<p/>
</span>
<input type="submit" value="上传"/>
</form>
</body>
</html>



三、报错
1、java.io.FileNotFoundException: Template /template/simle/form.ftl not found. 
这是当前访问的jsp文件中拼写错误
<s:form action="Remove" theme="simle"> 

正解:
<s:form action="Remove" theme="simple"> 


2、Could not create and/or set value back on to object

这个主要的是在表单对应的实体类中,没有加入默认的构造函数 导致。添加上就Ok了

比如:
新增Student , 那么就再Student.java 添加一个  public Student(){}
 

3、Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法



 

、4、在使用struts2的项目中上传文件的时候出现了一个这样的错误:
2011-7-30 20:29:02 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
信息: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir

2011-7-30 20:29:02 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
信息: Removing file upload F:\software_programming\project\source code\.metadata\.plugins\org

原因是没有设置存放临时文件的文件夹,而错误提示中的struts.multipart.saveDir就是设置临时文件夹的属性,把该配置写到struts.properties文件中即可,如下:

struts.multipart.saveDir = /tmp

如果此文件夹不存在,Struts 2会自动创建一个。

也可以在struts.xml配置文件中添加一个常量设置:

<constant name="struts.multipart.saveDir" value="/tmp"></constant>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值