我现在的项目中的写法是
1、在model中实例化一个对象
2、在action 又将对象的各个属性进行get set方法 觉得这样重复 请问有什么好的写法实例一个化对象
package com.log.model;
public class basicDoc_Rptype {
private Integer id;
private String rptype;
private String rpname;
private String rpdescription;
private String writeName;
private String writeTime;
private String modifyName;
private String modifyTime;
public String getWriteTime() {
return writeTime;
}
public void setWriteTime(String writeTime) {
this.writeTime = writeTime;
}
public String getModifyName() {
return modifyName;
}
public void setModifyName(String modifyName) {
this.modifyName = modifyName;
}
public String getModifyTime() {
return modifyTime;
}
public void setModifyTime(String modifyTime) {
this.modifyTime = modifyTime;
}
public String getWriteName() {
return writeName;
}
public void setWriteName(String writeName) {
this.writeName = writeName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getRptype() {
return rptype;
}
public void setRptype(String rptype) {
this.rptype = rptype;
}
public String getRpname() {
return rpname;
}
public void setRpname(String rpname) {
this.rpname = rpname;
}
public String getRpdescription() {
return rpdescription;
}
public void setRpdescription(String rpdescription) {
this.rpdescription = rpdescription;
}
}
对象对应的action
package com.log.action;import com.log.common.BaseAction;
import com.log.common.Page;
import com.log.manager.basicDoc_Rptype_Manager;
import com.log.model.basicDoc_Rptype;
@SuppressWarnings("serial")
public class basicDoc_Rptype_ListAction extends BaseAction{

private Integer id;
private String rptype;
private String rpname;
private String rpdescription;
private String writeName;
private String writeTime;
private String modifyName;
private String modifyTime;

    private basicDoc_Rptype_Manager basicDoc_Rptype_manager;
private Page page;
private boolean success;
public Page getPage() {
return page;
} public void setPage(Page page) {
this.page = page;
} public boolean isSuccess() {
return success;
} public void setSuccess(boolean success) {
this.success = success;
}
public String execute() throws Exception {
    
    page=new Page();
int start = Integer.valueOf(getRequest().getParameter("start"));
int limit = Integer.valueOf(getRequest().getParameter("limit"));
page.setStart(start);
page.setLimit(limit = limit == 0 ? 1 : limit);
page = basicDoc_Rptype_manager.listRptype(page, start, limit);
if (null != page.getRoot()) {
page.setSuccess(true);
}
return SUCCESS;
}

     public void addRptype() throws Exception {
     basicDoc_Rptype basicdoc_rptype=new basicDoc_Rptype();
     String getid=getRequest().getParameter("Record_id");
     if(getid!=null){   //如果ID不为空则转换为整数,然后set方法
     int rptypeId = Integer.valueOf(getRequest().getParameter("Record_id"));
     basicdoc_rptype.setId(rptypeId);
     }else basicdoc_rptype.setId(id);
  basicdoc_rptype.setRpdescription(rpdescription);
  basicdoc_rptype.setRpname(rpname);
  basicdoc_rptype.setRptype(rptype);
  basicdoc_rptype.setModifyName(modifyName);
  basicdoc_rptype.setModifyTime(currentTime());
  basicdoc_rptype.setWriteName(writeName);
  basicdoc_rptype.setWriteTime(currentTime());
  success=basicDoc_Rptype_manager.addRptype(basicdoc_rptype);
  getResponse().getWriter().print("{success:"+success+",msg:'"+success+"'}");
// return SUCCESS;  
}

  public void delRptype() throws Exception {
success=basicDoc_Rptype_manager.deleteRptype(id);
getResponse().getWriter().print("{success:"+success+",msg:'"+success+"'}");
}
  
  public void modifyRptype() throws Exception {
    String fieldName = getRequest().getParameter("fieldName");
String fieldValue = getRequest().getParameter("fieldValue");
int rptypeId = Integer.valueOf(getRequest().getParameter("id"));
  success=basicDoc_Rptype_manager.modifyRptype(fieldName, fieldValue, rptypeId);
}
  
  public void validatorRptypeUseorNot() throws Exception {
    String rptypeVal=getRequest().getParameter("rptypeVal");
    if(""!=rptypeVal)
     success=basicDoc_Rptype_manager.validatorRptype(rptypeVal);
    else success=true;
   getResponse().getWriter().write("{success:'"+success+"'}");
}
public String selectRPtypeByID() throws Exception {
page = new Page();
String idreceive=getRequest().getParameter("id");
if(idreceive==null || idreceive=="-1")
return SUCCESS;
int rpid= Integer.valueOf(idreceive);
page.setStart(0);
page.setLimit(2);
page = basicDoc_Rptype_manager.slectRpByID(page,rpid);
if (null != page.getRoot()) {
page.setSuccess(true);
}
return SUCCESS;
}

public String Select_all_rptype_no_condition() throws Exception {
    
    page=new Page();
page.setStart(0);
page.setLimit(999);
page = basicDoc_Rptype_manager.listRptype(page, 0, 999);
if (null != page.getRoot()) {
page.setSuccess(true);
}
return SUCCESS;
}
public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getRptype() {
return rptype;
} public void setRptype(String rptype) {
this.rptype = rptype;
} public String getRpname() {
return rpname;
} public void setRpname(String rpname) {
this.rpname = rpname;
} public String getRpdescription() {
return rpdescription;
} public void setRpdescription(String rpdescription) {
this.rpdescription = rpdescription;
} public String getWriteName() {
return writeName;
} public void setWriteName(String writeName) {
this.writeName = writeName;
} public String getWriteTime() {
return writeTime;
} public void setWriteTime(String writeTime) {
this.writeTime = writeTime;
} public String getModifyName() {
return modifyName;
} public void setModifyName(String modifyName) {
this.modifyName = modifyName;
} public String getModifyTime() {
return modifyTime;
} public void setModifyTime(String modifyTime) {
this.modifyTime = modifyTime;
} public void setBasicDoc_Rptype_manager(
basicDoc_Rptype_Manager basicDoc_Rptype_manager) {
this.basicDoc_Rptype_manager = basicDoc_Rptype_manager;
}
}

解决方案 »

  1.   

    你这个是属性驱动方式,你可以实现ModelDriven接口来实现模型驱动再有种方法就是 XXXmode.xxxproperty 来命名表单中的属性,action中只定义XXXmodel 这个,会自动对model的同名属性进行setter,但这样方式对表示层也算是一种强制入侵...
      

  2.   

    你的代码风格要改改basicDoc_Rptype  这种命名方式沿用了c/c++吧 ,java中建议使用骆驼命名法当然 要和你Team的代码风格一致是前提
      

  3.   

    struts2中action只要声明下封装的类并初始化,生成get、set方法即可,不需要把属性重新写一遍。
    在action中可以这样写:
        private basicDoc_Rptype b= null;
        然后get和set
    前台的表单名这样写:b.id  请求的时候自动就可以把值赋到basicDoc_Rptype对象中
    至于实例化basicDoc_Rptype用spring完成
      

  4.   

    ModelDriven拦截器.   查查.资料就知道了的
      

  5.   

    有两种方法可以实现:1.Action实现ModelDriven实现。2.直接定义对象类型属性即可。  private basicDoc_Rptype br;  br有get/set方法。
      

  6.   


    这个~~~要不就换Spring MVC吧!那个不用你get、set!
      

  7.   

    在action中直接声明一个对象实例,生成set/get方法
    页面中表单的名字 对象名.属性
      

  8.   

    我觉得可以定义一个vo类,传输数据,这个类在Action中实现getset方法就可以,不是更好吗
      

  9.   

    可以根据Action属性的不同将它分为两类:Field-Driven(属性驱动) Action和Model-Driven(模型驱动) Action。 
    一、Field-Driven(属性驱动)Action,Action拥有自己的属性,这些属性一般是Java的基本类型。表单字段直接和Action的属性 对应。二、实现了modelDriven接口可以在action中直接获得例如User对象,它会将Object getModel()取得的User放到ValueStack中。可以理解为将这个User的属性追加到Action中。它主要是作用是实现类似 Struts的FormBean功能。在struts2中,提供了一种直接使用领域对象的方式,就是让action实现com.opensymphony.xwork2.ModelDriven接口,ModelDriven让你可以直接操作应用程序中的领域对象,允许你在web层和业务层使用相同的对象。ModelDriven接口只有一个方法        public Object getModel() {
    return null;
    }该方法返回一个用于接收用户输入数据的对象模型,在这个模型对象中的属性可以直接通过(属性名)userName来访问,而不需要使用(对象名.属 性名)user.userName这种格式来访问了,在action也不需要对对象提供getter和setter方法了,但是必须要在action中进 行new操作如下// ModelDriven要使用泛型哦public class LoginAction extends ActionSupport implements ModelDriven<User>{private static final long serialVersionUID = -6434128483294080524L;//这里必须要new
    private User user=new User();
    public String login() throws Exception {
    // TODO Auto-generated method stub  
    return SUCCESS;
    }//这里是实现接口方法@Override
    public User getModel() {
    // TODO Auto-generated method stub//别忘记了,要把返回值写上哦
    return user;
    }
    }这样一个ModelDriven就实现完毕了和属性驱动的Action有很大的区别,下面一一列举:(1)模型驱动的Action必须实现ModelDriven接口,而且要提供相应的泛型,这里当然就是具体使用的Java Bean了。(2)实现ModelDriven的getModel方法,其实就是简单的返回泛型的一个对象。(3)在Action提供一个泛型的私有对象,这里就是定义一个User的user对象,并提供相应的getter与setter。好了,上面的三件事做完之后,Action就会去自动调用User的setter将表单中的name属性的值赋给User中的属性。而Action的后续处理的Jsp页面后者是Servlet就可以使用user对象了。到底是用属性驱动和是模型驱动呢? 这个问题困扰了很多Struts2的初学者,我这里提供一些建议:(1)请你统一整个系统中的Action使用的驱动模型,即要么都是用属性驱动,要么都是用模型驱动。(2)如果你的DB中的持久层的对象与表单中的属性都是一一对应的话,那么就使用模型驱动吧,毕竟看起来代码要整洁得多。(3)如果表单的属性不是一一对应的话,那么就应该使用属性驱动,否则,你的系统就必须提供两个Bean,一个对应表单提交的数据,另一个用与持久层。
      

  10.   

    看了好长时间没明白楼主啥意思,学习了,但是据小的片面理解,这里面的get/set面向的层是不一样的吧?pojo层,也就是最底层的面向的是他这个对象本身的属性,你的action层其实也是一个类,那get/set的是这个类的东西,不想关啊,楼主的意思是不是每次写很繁琐,那你如果action层跟pojo层有很大出入,那么楼主完全可以封转类似bo层dto层之类的业务层封装跟业务数据传递,完全不是楼主想的那个样子啊
      

  11.   

    在action中定义实体对象~~这种方式就跟1是一样的~~
      

  12.   

    1.用模型驱动
    2.如果表单的属性不是一一对应的话可以加个dto层
      

  13.   

    把实体的对象做atcion的属性就好了,
    或者你 的action implements ModelDriven<model类>
      

  14.   

    //建议采用DomainModel的做法,写法如下package com.log.model;
    public class basicDoc_Rptype {
    private Integer id;
    private String rptype;
    private String rpname;
    private String rpdescription;
    private String writeName;
    private String writeTime;
    private String modifyName;
    private String modifyTime;
     //setter和getter方法...} package com.log.action; 
     
    public class basicDoc_Rptype_ListAction extends ActionSupport{basicDoc_Rptype basicDoc_Rptype1;public String execute() throws Exception { 

    return SUCCESS;
    }//生成basicDoc_Rptype1的setter和getter方法...
      
    }//客户端参数这样写 basicDoc_Rptype1.id=1 & basicDoc_Rptype1.rptype=t ,提交后basicDoc_Rptype1就有相应的值了.
    //建议类名按规范现实性
      

  15.   

    还是封装为对象好些,在jsp中对象.属性  就好了  这样子也便于维护。