在开始介绍域模型之前我们要明白一点,为什么通过域模型我们可以把参数这么方便的在后台接收。

那是因为

通过参数拦截器(params interceptor)自动的把前台传过来的参数给域对象(domain object),其实也就是调用了域对象的set方法。前提是用struts2框架,并创建一个JavaBean属性的域对象(domain object)并生成相应的getter和setter方法。  域模型不仅方便了参数的传递、数据的持久化,同时,也可以在前台jsp中,动态显示、回填。如:

<s:textfield name="user.name" label="User Name"  value="${user.name}" /> 可以回填name的值

一、DomainModel就是域模型。

1、所谓域模型就是在我们的实体域里面,真正存在的域的概念。

如一个BBS系统,真正存在的实体的概念就是:版块、帖子(Article)、话题(Topic),会员(User)

我们要接收参数,这个参数干嘛?还不是要接收到了之后,把它赋到某一个对象上。然后把它存在数据库里面。既然name与age总是要交给某一个user对象的。那么我们是不是可以这样用呢?

2、当在IE中调用了user.action时。在IE地址栏显示:http://localhost:8080/struts2_0800/user/user!add?user.name=a&user.age=8

它仍然是调用了user下面的user.action,它的类叫com.bjsxt.struts2.user.ation.UserAction.class,调用了它的add方法。在这个方法里面,直接输出的是user.getName()与user.getAge().

二、新建项目

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>

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

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

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

<result>/user_add_success.jsp</result>

</action>

</package>

</struts>

二、UserAction.class类的内容如下:

package com.bjsxt.struts2.user.action;

import com.bjsxt.struts2.user.model.User;

import com.opensymphony.xwork2.ActionSupport;

 

public class UserAction extends ActionSupport {

private User user;

public String add(){

System.out.println("name="+user.getName());

System.out.println("age="+user.getAge());

return SUCCESS;

}

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

}

三、在上面的类中,有一个user属性,这个对象所属的类开源于另外一个包,就是model包。也就是域模型。

package com.bjsxt.struts2.user.model;

public class User {

private String name;

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

四、如果像项目struts_0700 那样,如果在域模型里面有200多个属性,那么是不是要在UserAction类里面写200多个相应的属性,还要写相应的get,set呢?

在根据域模型接收参数时,就不用了。

五、这样,如果想给user的属性赋值,则在IE地址栏写:

http://localhost:8080/struts2_0800/user/user!add?user.name=a&user.age=8

就是user.name=    user.age=

相当于调用了setUser.setName()。setUser.setAge()

五、这就是用域模型直接接收这个参数。

六、如何是用户登录,希望有一个用户名,一个密码,一个确认密码。可是我们的用户域模型通常只有两个属性:用户名,密码。

那么用域模型就不可以了。那么如何解决这个问题呢?

1、答:可以直接用属性接收,如果喜欢用域模型,则再建立一个user。

2、除了上面方法外,,还有一种方式,就是再定义一个DTO(data transfer object)数据传输对象。,由这个对象,再生成域对象。

21

package com.bjsxt.struts2.user.dto;

public class UserDTO {

private String name;

private String password;

private String confirmingpassword;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getConfirmingpassword() {

return confirmingpassword;

}

public void setConfirmingpassword(String confirmingpassword) {

this.confirmingpassword = confirmingpassword;

}

}

2.2在UserAction类中用UserDTO属性

package com.bjsxt.struts2.user.action;

import com.bjsxt.struts2.user.model.User;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

private User user;

//private UserDTO userDTO;

public String add(){

System.out.println("name="+user.getName());

System.out.println("age="+user.getAge());

return SUCCESS;

}

public User getUser() {

return user;

}

public void setUser(User user) {

this.user = user;

}

}

2.3这样前台输入进来的参数,就与UserDTO相匹配了。

然后在UserAction里面处理完之后,再根据UserDTO ,生成User对象。

方法就是从UserDTO里面拿到相应的参数,添加到User里面。

UserDTO就是把参数传递过来,在new User时,再把参数传递给User对象。

3、那么什么时候用DTO对象呢?只能是当前台参数传递过来时,跟我们的域模型匹配不上。

这时有两种方式,一种方式是用属性接收过来,另外一种方式,就是用DTO对象。

七、jsp页面

1、index.jsp

***********

<a href="user/user!add?user.name=a&user.age=8">添加用户 </a><br>

************

2、user_add_success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>

<%

String path = request.getContextPath();

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

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

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

<title>My JSP 'user_add_success.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

</head>

<body>

This is my JSP page. <br>

</body>

</html>

struts2接收参数——域模型、DTO的更多相关文章

  1. struts2接收参数的5种方法

    以下形式中最常用的是前两种 1. 使用Action的属性: 在action 里面定义要接收的参数,并提供相应的setter,getter,和提交参数的名称一致, 并不用做数据类型的转换相应提交方式可以 ...

  2. Struts2接收参数的几种方式

    一.用Action属性 在action里定义要接收的参数,并提供相应的set和get方法. 如: public class LoginAction extends ActionSupport { pr ...

  3. struts2接收参数的几种形式

    1.使用属性 HTML: <form action="login" method="post" name="form1"> 用户 ...

  4. 关于在Struts2的Action中使用domain模型接收参数的问题

    最近在搭建一个最新的ssh2框架,今天在调试的时候,发现了一个以前一直没有注意过的问题,我在Action中使用域模型的方式去接收jsp画面中的参数的时候,发现参数总是接收不完,头一次遇到这种问题,现在 ...

  5. Struts2 DomainModel、ModelDriven接收参数

    一.DomainModel(域模型) 1. 应用场景:一般我们在struts2的action中接收参数通常是如下方式 package cn.orlion.user; import com.opensy ...

  6. Struts2学习---基本配置,action,动态方法调用,action接收参数

    首先我们先来直接配置,然后再来讲原理: 第一步:jar包的引入: 我们可以到struts2的官网上下载: http://struts.apache.org/download.cgi#struts251 ...

  7. 参数对象Struts2中Action的属性接收参数

    题记:写这篇博客要主是加深自己对参数对象的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. Action中三种传递并接受参数: 1.  在Action添加成员属性接受参数 例如请求的 ...

  8. JavaWeb_(Struts2框架)参数传递之接收参数与传递参数

    此系列博文基于同一个项目已上传至github 传送门 JavaWeb_(Struts2框架)Struts创建Action的三种方式 传送门 JavaWeb_(Struts2框架)struts.xml核 ...

  9. Struts2中Action接收参数的四种形式

    1.Struts2的Action接收参数的三种形式.      a. 使用Action的属性接收(直接在action中利用get方法来接收参数):                   login.js ...

随机推荐

  1. Qt 学习之路 :文本文件读写

    上一章我们介绍了有关二进制文件的读写.二进制文件比较小巧,却不是人可读的格式.而文本文件是一种人可读的文件.为了操作这种文件,我们需要使用QTextStream类.QTextStream和QDataS ...

  2. ARCGIS二维三维放大缩小

    private void ULZoomPan() { ESRI.ArcGIS.SystemUI.ICommand com = new ControlsGlobeFixedZoomOutCommand( ...

  3. css考核点整理(八)-在什么情况下通过img引入图片,什么情况用背景图引入?背景属性有哪些

    在什么情况下通过img引入图片,什么情况用背景图引入?背景属性有哪些

  4. Web的鼠标拖动效果

    以前写过一个拖动效果的Demo,拖拽元素新位置的计算是放在拖拽元素的mousemove事件中进行的.计算效率差,而且效果不好.所以一直有想怎样才能做出jquery-ui那种顺滑的拖拽效果. 其实顺滑的 ...

  5. noip 2003 传染病控制(历史遗留问题2333)

    /*codevs 1091 搜索 几个月之前写的70分 今天又写了一遍 并且找到了错误 */ #include<cstdio> #include<vector> #define ...

  6. Rouh set 入门知识2(基础定义篇)

    接上一篇,简单说明一下知识库的关系,设K1=(U,S1)和K2=(U,S2)为知识库 1.如果IND(S1)=IND(S2),即U/IND(S1)=U/IND(S2),则知识库K1与知识库K2是等价的 ...

  7. a标签的背景图在ie8下显示问题

    今天遇到个小问题,纠结了很久,分享下 a标签添加背景图,需要给a添加display:block样式 但是在ie8下还是不能显示背景图,开始以为是由于a标签为空造成的,试了下添加内容也没用,后来注意到一 ...

  8. 单例模式,多种实现方式JAVA

    转载请注明出处:http://cantellow.iteye.com/blog/838473 第一种(懒汉,线程不安全): public class Singleton { private stati ...

  9. 点击文字可以选中相应的checkbox

    <html><head><title>中国站长天空-网页特效-表单特效-点击文字选中的复选框</title><meta http-equiv=&q ...

  10. java通过移位转16进制

    public class Main { public static void main(String []args) { Main main = new Main(); System.out.prin ...