Struts2获取后台数据

20 篇文章 0 订阅
15 篇文章 0 订阅

获取后台数据:

1.<s:property value="name"/>前提是后台action中有name这个属性

2.

后台中:

this.addActionMessage("  ");

this.addActiionError("  ");

this.addFieldError("name", "name is error");

前台用:

<s:actionmessage/>

<s:actionerror/>

<s:fielderror fieldName="name" theme="simple"/>

<s:property value="errors.name[1]"/>

3.(一般用IoC代替)

后台用:

private Map request;

private Map session;

private Map application

request = (Map)ActionContext.getContext().get("request");

session=ActionContext.getContext().getSession();

application = ActionContext.getContext().getApplication();

request.put("name", user.getName());

session.put("name", user.getName());

application.put("sex", user.getSex());

前台用:

<s:property value="#request.name"/>

如:UserDao().select()返回所有user对象,其有属性namesexpasswordeamil

private Map request = (Map)ActionContext.getContext().get("request");

List<User> list = new UserDao().select();

request.put("user", list);

<s:iterator value="#request.user">

<s:if test="sex.equals(\"female\")">

<s:property value="name" /> <s:property value="sex" /> <s:property

value="email" /> <a href="http://dusiguxia.blog.163.com/blog/work3/work2/update.jsp">修改用户信息</a>

<br />

</s:if>

<s:else>

<s:property value="name" /> <s:property value="sex" />

<a href="http://dusiguxia.blog.163.com/blog/work3/work2/update.jsp">修改用户信息</a>

<br/>

</s:else>

</s:iterator>

获取前台url中的参数:

<%String name=request.getParameter("age");%>

提交表单:后台的action中有user对象属性,user对象有属性namesexpasswordeamil

<form name="myform" action="<%=path%>/work3_2_2" method="post">

<s:textfield name="user.name" label="用户名" ></s:textfield><br>

<s:password name="user.password" label="密码"></s:password><br>

<s:radio list="#{'male':'', 'female':''}" name="user.sex" label="性别" listKey="key" listValue="value"></s:radio><br>

<s:textfield name="user.email" label="邮箱"></s:textfield>

<s:submit value="提交"></s:submit>

</form>

IoC: inverse or control 控制反转(DIdependency inject 依赖注入)

客户端请求到来,Struts2调用相应的action。查询其是否实现了RequestAware,SessionAware,ApplicationAware,如果实现了,就把自己获取到的RequestSessionApplication赋给action中的RequestSessionApplication

Domain model:真正存在的实体概念

  Action里的属性就是user对象,从前台user.name,user.age中获取user对象的属性,然后通过actionsetUser()方法生成user对象,getUser()方法返回对象,至此一个对象便可以放到实体数据库中。

DTO data transfer object

  Action里的属性就是userDTO对象,从前台userdto.name,userdto.age,userdto.password中获取userDTO对象的属性,然后通过actionsetUserDTO()方法生成userDTO对象,getUserDTO()方法返回对象,然后再在userDTO对象所属的类通过已经获取的userDTO对象(利用其user所需要的属性),生成一个use对象,至此一个对象便可以放到实体数据库中。

Struts.xml常用配置:

<struts>

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

<constant  name="struts.i18n.encoding" value="gbk">

<package  name=""  namespace="" extends="struts-default">

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

     <action name ="" class="" method="">

         <result>

         </result>

     </action>

</package>

</struts>

Result属性:

<result type="">  typedispatcher(默认)redirect chain redirectAction前两个是跳转到jsp文件,后两个是跳转到action(即action的名字)。

</result>

全局result

<global-results>

    <result name=""></result> 

</global-results>

Action里的属性值放在值栈里,可以通过<s:property value="属性名">获取,如果resulttype="dispatcher",那么它访问的jsp文件共享这个值栈,如果type="redirect",那么它访问的jsp文件不共享这个值栈,也就不能在该jsp文件中通过<s:property value="属性名">来获取action中的属性值,只能通过<s:property value="#parameters.属性名">来获取。

OGNL  object graph navigation language 

初始化domain model

   在action里直接new

   从前台传参数初始化,此时需要保持domain model要有参数为空的构造方法,同时传参数是要用对象名.参数的方式传。

访问普通方法:(action中有name属性和domain model user)

<s:property value="name.length()"/>

<s:property value="user.age"/>

<s:property value="user.getName()"/>

<s:property value="user.loginuser.getName()"/>

访问静态方法:

<s:property value="@com.yjx.struts.UserAction@getName()"/>

<s:property value="@com.yjx.struts.UserAction@age"/>

访问构造方法:

<s:property value="new com.yjx.struts.User("hellen")"/>

过滤:(userslist类型,里面放的是domain model user)

  <s:property value="users.{?#this.age==1}[0].age"/>

  <s:property value="users.{^#this.age>1}{age}"/>

  <s:property value="users.{$#this.age>1}{age}[0]"/>

对于<reusult type="dispatcher">的服务器端跳转,struts会把跳转后用到的action按先后顺序压进值栈中,这样就会在值栈中出现多个action

Struts标签:

Property tags:

<s:property value="username"/><br>

<s:property value="'username'"/><br>

<s:property value="admin" default="管理员"/><br>

<s:property value="'<hr/>'" /><br>

<s:property value="'<hr/>'" escape="false"/><br>

set tags:

<s:set var="name" value="'yjx'" scope="session"/><br>

<s:property value="#session.name"/><br>

<s:set var="name" value="'username'"/><br>

<s:property value="#request.name"/><br>

bean tags:

<s:bean name="com.bjsxt.struts2.action.domainmodel.User" var="user"><br>

<s:param name="name" value="'yjx'"></s:param><br>

</s:bean><br>

<s:property value="#user.name"/><br>

include tags:

<s:set var="include" value="'/Hello.jsp'"/><br>

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

iterator tags:

<s:iterator value="{'aaa','bbb','ccc'}" var="t" status="status"><br>

<s:property value="#t.toUpperCase()"/>

<s:property value="#status.count"/>

<s:property value="#status.index"/>

<s:property value="#status.odd"/>

<s:property value="#status.even"/>

<s:property value="#status.first"/>

<s:property value="#status.last"/><br>

</s:iterator>

<s:iterator value="#{1:'a',2:'b',3:'c'}">

<s:property value="key"/>|<s:property value="value"/><br>

</s:iterator>

Action中的异常处理:

  在struts.xmlaction中:

 <exception-mapping result="error" exception="java.sql.SQLException"></exception-mapping>

   <result name="error">error.jsp</result>

也可以定义全局exception-mapping和全局result:

<global-exception-mappings result="error" exception="java.lang.Exception">

</global-exception-mappings>

<global-results>

    <result name="error">error.jsp</result>

</global-results>

类型转换:

http://localhost:8080/struts3/test1?name=yjx&age=19&d=1987-09-12&list=math&list=chinese&list=english&p['1']=p1&p['2']=p2

<%

    String path = request.getContextPath();

    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";

%>

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

response.setHeader("Refresh","1; URL=http://localhost:8080/mybbs1.1/admin/index.html");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值