研磨struts2————————读书笔记(一)

来源:互联网 发布:linux rm -rf笑话 编辑:程序博客网 时间:2024/05/16 18:16


eclipse 展示行数
在java程序左边右击--preference--general--editors--text editors中show line numbers选上
struts2解决中文乱码问题
struts.xml中配置
<constant name="struts.local" value="zh_CN"/> 设置程序运行时使用的local
<constant name"struts.i18n.encoding" value="gb2312"/>设置程序运行时使用的编码方式
form中action的配置
<form action="/helloworld/hellworldAction.action">
/helloworld是web上下文
helloworldAction是action name属性
.action注意加上

eclipse如何引用tomcat
window-->preferences-->server中的runtime environment 选add选择tomcat,这样完成了eclipse中
引用tomcat
然后新建项目后new server绑定就可以了
注意context root是项目根目录,默认是工程名

window--》customize--》shortcuts可以选某项,new中会显示,而不用先选other再选别的
action class方便的可以右击 copy qualified name
result中jsp路径可以右击jsp文件,properties中复制路径

可以不写get set,把属性设为public就可以传参数进action的属性里

使用modelDriven时,一个action只能对应一个model
基本类型属性(setPassword(),getPassword()),直接使用域对象(setUser(),getUser())和模型驱动(getModel())3者可共用,
但由于基本类型属性和模型驱动都可直接用属性<input name="password" type="text"/>,此时值会传入模型属性,
而基本类型属性为null。

传入数目不定的对象
private List<UserModel> users;
public List<UserModel> getUsers(){
 return users;
}
public void setUsers(List<UserModel> users){
 this.users = users;
}

<input type="text" name="users[0].account" />
<input type="text" name="users[0].password" />
<input type="text" name="users[1].account" />
<input type="text" name="users[1].password" />
注意是属性名称[索引]的格式,此时创建2个UserModel对象
如果不加索引
<input type="text" name="users.account" />
<input type="text" name="users.password" />
<input type="text" name="users.account" />
<input type="text" name="users.password" />
则会创建4个UserModel对象

users是与List<UserModel> users 对应的

namespace与action
package如果没有声明namespace
<form action="/根目录/action名.action" >
如果package声明了namespace="/名字1"

<form action="/根目录/名字1/action名.action">
package中的abstract属性若为true
则包内不能有action,但是此包可被继承

action使用通配符
<action name="*_*" class="cn.javass.action.action.{1}Action" method="{2}">

Action默认class是ActionSupport,在struts-default里有声明default-class-ref
ActionSupport的execute()默认返回success,而result默认值是success

action在每次访问的时候都会新建一个实例

调用非execute方法
1.在<action>加上method

<action name="helloworldAction" class="cn.javass.action.action.HelloWorld" method="create">
2.在访问的url上,在action名后(注意是action name后)加上感叹号和方法名
<form action="/helloworld/helloworldAction!create.action">

Result
type="dispatcher"
dispatcher对应的类相当于RequestDispatcher的再包装
dispatcher的跳转会保持同一个request,可调转到jsp或者servlet,不能调的另一个action(需用type="chain")

<result name="success" type="dispatcher">/servletname</result>
需用在web.xml定义这个servlet。
有两个param可以写
location转发到的jsp
parse,是否通过ognl来引用location参数,默认为true
<result name="toWelcome" type="dispatcher">
 <param name="location">/${folder}/welcome.jsp</param>
 <param name="parse">true</param>
</result>
注意folder是action类的属性(即setFolder(),getFolder()),因为parse为true,所以可以解析他
type=redirect 转向的页面相当于sendRedirect,该页面无法得到原action的属性
如果非要传参数用
<result name="toWelcome" type="redirect">/${folder}/welcome.jsp?account=${account}</result>
然后welcome页面用
<%request.getParameter("account")%>接受参数

type=chain用来将Action执行完后链接到另一个Action中继续执行,新的Action事业上一个Action的上下文(ActionContext
)数据也会被传递。
参数有两个actionName,nameSpace
actionName是要传到的action名,namespace是要传的命名空间,默认是当前的命名空间

<result name="toSecond" type="chain">
 <param name="actionName">secondAction</param>
 <param name="namespace">/....</param>
</result>

原创粉丝点击