Struts2学习笔记

Structs修改后自动更新

<constant name="struts.devMode" value="true" />

 

Action执行的时候并不一定要执行execute方法<br />

 

  <action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction" 

 

method="add">

            <result>/user_add_success.jsp</result>

        </action>

 

        <action name="user" class="com.bjsxt.struts2.user.action.UserAction">

            <result>/user_add_success.jsp</result>

        </action>

可以在配置文件中配置Action的时候用method=来指定执行哪个方法

也可以在url地址中动态指定(动态方法调用DMI)(推荐)<br />

<a href="<%=context %>/user/userAdd">添加用户</a>

<br />

<a href="<%=context %>/user/user!add">添加用户</a>

<br />

前者会产生太多的action,所以不推荐使用

 

必须使用绝对路径

 

<% String context = request.getContextPath(); %>

<a href="<%=context %>/actions/Studentadd">添加学生</a>

或者

<base href="<%=basePath %>"/>

 

通配符配置

<action name="*_*" class="com.bjsxt.struts2.action.{1}Action" method="{2}">

            <result>/{1}_{2}_success.jsp</result>

            <!-- {0}_success.jsp -->

        </action>

 

Structs2接收参数的方式有三种:

ActionAttrParamInput

DomainModelParamInput

ModelDrivenParamInput

 

Structs 标签

<%@taglib uri="/struts-tags" prefix="s" %>

 

<s:debug></s:debug>

 

s:property 标签能把 Value Stack 和 Stack Context 里面的内容取出来

<s:property value="errors.name[0]"/> 直接写名字就行了

 

Stack Context 则需加#号<s:property value="#request.r1"/>

 

访问Web元素

使用依赖注入 

首先implements RequestAware,SessionAware, ApplicationAware

然后实现他们的方法

最后把所要放入的值,put()进去

 

模块包含

<include file="login.xml" />

 

默认action引用(即使输入不存在的action,也可以显示默认的action)

<default-action-ref name="index"></default-action-ref>

 

Action 总结

1.实现一个Action的最常用方式:从ActionSupport继承

2.DMI动态方法调用

3.通配配置*{1}{2}

*-*

4.接引参数的方法(一般用属性或者DomainModel来接收)

5.简单参数验证

a)一般不使用Struts2的UI标签

6.访问Web元素

a)Map类型

i IOC

ii 依赖Struts2

b) 原始类型

i IOC 

ii 依赖Struts2

7.饮食文件配置

8.默认action处理

 

Result type跳转

服务器跳转

<result type="dispatcher">/r1.jsp</result>

客户端跳转

<result type="redirect">/r2.jsp</result>

action跳转

<result type="chain">r1</result>

 

  <param name="actionName">dashboard</param>

            <param name="namespace">/secure</param>

<result type="redirectAction">r2</result>

 

result里的包继承

 <package name="admin" namespace="/admin" extends="user">

 

动态结果集(用的并不多)

<result>${r}</result>

r跟据Action里面的值动态决定

 

Result总结

1.常用四种类型

a) dispatcher(默认)

b) redirect

c) chain

d) redirectAction

2。全局结果集

a) global-results|extends

3.动态结果(了解)

a) 在action中保存一个属性,存储具体的结果location

4.传递参数

a)客户端跳转才需要传递

b)${}表达式(不是EL)

 

OGNL

1.user.xxx只有传值,才会构造,想初始化 domain model可以自己new,也可以伟值

但必须要有空的构造方法

 

<s:set var="incPage" value="%{'/_include1.html'}" />

<s:include value="%{#incPage}"></s:include>

%的作用强制把{}里的东西不当字符串而是把它当成OGNL表达示

 

访问值栈中的值

 

Struts-Tags

1.通用标签

a)property

b)set(只使用value,var,scope)

c)bean

d)include(以后少用)

 

2.控制标签

a) if elseif else

b) iterator(var,status)

 

3.UI标签

a) theme

i. simple shtml(默认)css.xhtml.ajax

 

 

5.$#%的区别

a) $用于il8n和sturts配置文件

b) #取得ActionContext的值

c) %将原体的文本属性解析为ognl,对于本来就是ognl的属性不起作用。

i 参考<s:property>和<s:include>

 

定义自己的theme

1 css(覆盖 struts2原来的css)

2 覆盖单个文件

3 定义自己的theme

4 实战(把所有主题定义为simple,fielderror行列处理,自己控制期货标签的展现)

 

命名约定

 

EXT框架

 

mysql mangement lite

 

 

SQL> create table category(

  2  id int primary key,

  3  name varchar(50),

  4  description varchar(200)

  5  );

 

 

SQL> create sequence cateid

  2  start with 1

  3  increment by 1

  4  nocache

  5  nocycle

  6  order;

 

  1  create or replace trigger zizeng_zhang

  2  before insert on category

  3  for each row

  4  begin

  5  if :new.id is null then

  6  select cateid.nextval into :new.id from dual;

  7  end if;

  8* end zizeng_zhang;

SQL> /

 

 

声明式异常处理

1.在Action中进行异常映射

2.在Package中进行全局异常映射

3.使用继承共用异常映射

4.Struts2中异常处理由拦截器实现(观察Struts-default.xml)

a)实际上Struts2的大多数功能都由拦截器实现

 

default-action-ref慎用

 

国际化问题

I18n

app_zh_CN.preperties

 

1.I18N原理 

a) ResourcBundle 和Locale的概念

b)资源文件

c)Native2

2.Struts的资源文件

a) Action-Package-App级

b) 一般只用APP

<constant name="struts.custom.i18n.resources" value="bbs2009"></constant>

 

<s:text name="welcome.msg">

//传参数

<s:param value="username"></s:param>

</s:text> 

c)动态语言切换

再写一个LangAction 传一个参数 request-local=en_US

 

 

类型转换

 

public class MyPointConverter extends StrutsTypeConverter{

 

 

 

@Override

public Object convertFromString(Map context, String[] values, Class toClass) 

 

{

Point p = new Point();

String[] strs = (String[])values;

String[] xy = strs[0].split(",");

p.x = Integer.parseInt(xy[0]);

p.y = Integer.parseInt(xy[1]);

return p;

}

 

@Override

public String convertToString(Map context, Object o) {

// TODO Auto-generated method stub

return o.toString();

}

 

}

三种注册方式

1.局部:XXXAction-conversion.properties

1.p(属性名称)=converter

 

2.全局

xwork-conversion.properties

3.Annotation

 

如果遇到非常麻烦的映射转换

1.request.setAttribute();

2.session;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值