构造函数问题

 我现在在做病人退出的页面,数据表EXITMT跟电子病历表EHRMT是多对一的关联。现在的问题是,在cdms/domain/ehr下的ExitHistory.java中,构造函数ExitHistory()有点问题。

 cdms/domain/her/ExitHistory.java //

package  com.cdms.domain.ehr;
import  org.hibernate.Session;
import  com.cdms.dataaccess.DAOHelper;
import  com.cdms.dataaccess.model.AdmissionHistoryMt;
import  com.cdms.dataaccess.model.EhrMt;
import  com.cdms.dataaccess.model.ExitMt;
import  com.cdms.domain.IEntity;
import  com.cdms.util.BooleanUtil;
import  com.cdms.presentation.ehr.form.ExitHistoryForm;
 
/** */
public   class  ExitHistory  implements  IEntity  {
         
private ExitMt target;
         
private EhrMt ehr;
 
         
public ExitHistory(EHR ehr) {
 
//开始打算用如下代码得到target对象此方法不通           
//               Integer exitid=(Integer)ehr.getExitHistory().getId(); //死循环!!!
                   target=new ExitMt(exitid,(EhrMt)ehr.getTarget());
                   
//               System.err.println("target=="+target+" reason"+target.getExitreason());
         }

 
/下面部分是属性的getters与setters
         /**
          * 
@return Returns the exitDate.
          
*/

         
public java.util.Date getExitDate() {
                   
return target.getExitDate();
         }

         
/**
          * 
@param exitDate The exitDate to set.
          
*/

         
public void setExitDate(java.util.Date exitDate) {
                   target.setExitDate(exitDate);
         }

 
         
/**
          * 
@return Returns the exitdetail.
          
*/

         
public java.lang.String getExitdetail() {
                   
return target.getExitdetail();
         }

 
         
/**
          * 
@param exitdetail The exitdetail to set.
          
*/

         
public void setExitdetail(java.lang.String exitdetail) {
                   target.setExitdetail(exitdetail);
         }

 
         
/**
          * 
@return Returns the exitreason.
          
*/

         
public java.lang.String getExitreason() {
                   
return target.getExitreason();
         }

 
         
/**
          * 
@param exitreason The exitreason to set.
          
*/

         
public void setExitreason(java.lang.String exitreason) {
                   target.setExitreason(exitreason);
         }

 
         
/**
          * 
@return Returns the priaffection.
          
*/

         
public java.lang.String getPriaffection() {
                   
return target.getPriaffection();
         }

 
         
/**
          * 
@param priaffection The priaffection to set.
          
*/

         
public void setPriaffection(java.lang.String priaffection) {
                   target.setPriaffection(priaffection);
         }

 
         
/**
          * 
@return Returns the remark.
          
*/

         
public java.lang.String getRemark() {
                   
return target.getRemark();
         }

 
         
/**
          * 
@param remark The remark to set.
          
*/

         
public void setRemark(java.lang.String remark) {
                   target.setRemark(remark);
         }

 
         
/**
          * 
@param target The target to set.
          
*/

 
         
public Object getTarget() {
                   
return target;
         }

 
         
public void setTarget(Object _target) {
                   target 
= (ExitMt) _target;
 
         }

 
         
public Object getId() {
                   
return target.getId();
         }

 
         
public void setId(Object id) {
                   target.setId((Integer) id);
 
         }

}

  
下面是 cdms/presentation/ehr/action/ExitHistoryAction.java 代码:
/*              cdms/presentation/ehr/action/ExitHistoryAction.java   */
 
package  com.cdms.presentation.ehr.action;
// 省略大量包的导入
 
public   class  ExitHistoryAction  extends  BaseDispatchAction  {
         
private static final String HISTORY = "exitHistory";
         
public ActionForward toMain(ActionMapping mapping, ActionForm actionForm,
                            HttpServletRequest request, HttpServletResponse response)
                            
throws Exception {
                   SecurityContext secContext 
= (SecurityContext) SessionUtil.getSecurityContext(request);
                   ExitHistoryForm form 
= (ExitHistoryForm)actionForm;            
                   Integer ehrid 
= (Integer)request.getSession().getAttribute("ehrid");
                   EHR ehr 
= webhelper.getEHR().loadEHR(secContext, ehrid);
 
                   ExitHistory mb 
= ehr.getExitHistory();
                   
if (mb != null{
                            convertoForm(form, mb);
                   }

                   
return mapping.findForward(HISTORY);
         }

         
         
         
public ActionForward save(ActionMapping mapping, ActionForm actionForm,
                            HttpServletRequest request, HttpServletResponse response)
                            
throws Exception {
                   SecurityContext secContext 
= (SecurityContext) SessionUtil.getSecurityContext(request);
                   ExitHistoryForm form 
= (ExitHistoryForm) actionForm;
                   Integer ehrid 
= (Integer)request.getSession().getAttribute("ehrid");             
                   EHR ehr 
= webhelper.getEHR().loadEHR(secContext, ehrid);
                   ExitHistory mb 
= new ExitHistory(ehr);            
                   convertoInfo(mb, form);
                   ehr.setExitHistory(mb);            
                   webhelper.getEHR().saveExitHistory(secContext, ehr);                   
                   
return mapping.findForward("operateSuc");           
         }

         
         
private void getMainData(HttpServletRequest request) throws Exception {
         
         }

         @Override
         
protected void validate(HttpServletRequest request, ActionForm form) throws Exception {
                   
// TODO Auto-generated method stub            
         }

         
         
         
private void convertoForm(ExitHistoryForm form, ExitHistory item) {
                   form.setExitDate(item.getExitDate());
                   form.setExitdetail(item.getExitdetail());
                   form.setExitreason(item.getExitreason());
                   form.setPriaffection(item.getPriaffection());
                   form.setRemark(item.getRemark());
         }

 
         
private void convertoInfo(ExitHistory item, ExitHistoryForm form) {
                   item.setExitDate(form.getExitDate());
                   item.setExitdetail(form.getExitdetail());
                   item.setExitreason(form.getExitreason());
                   item.setPriaffection(form.getPriaffection());
                   item.setRemark(form.getRemark());      
         }
        
         
}

 
 
顺便附带上EHR.java的代码。篇幅原因,只显示婚育史与病人退出的相关代码!
 
/*                           cdms/domain/ehr/EHR.java                  */
package  com.cdms.domain.ehr;
import  java.lang.reflect.InvocationTargetException;
import  org.apache.commons.beanutils.BeanUtils;
import  com.cdms.dataaccess.model.EhrMt;
import  com.cdms.dataaccess.model.MemberInfo1St;
import  com.cdms.domain.IEntity;
import  com.cdms.domain.followup.MedicationTherapyCase;
import  com.cdms.domain.followup.MedicationTherapyFDBK;
import  com.cdms.domain.usermanage.Member;
import  com.cdms.dataaccess.model.FollowupPerfInfoBt;
 
/**
 * 电子病历
 * 
 
*/

public   class  EHR  implements  IEntity  {
         
private EhrMt target;
         ……
         
private MarriageBearingHistory  marriageBearingHistory;
         
private ExitHistory  exitHistory;
         
         
/**
          * 婚育史
          * 
          * 
@return
          
*/

         
public MarriageBearingHistory getMarriageBearingHistory() {
                   
if (marriageBearingHistory == null)
                            
return new MarriageBearingHistory(this);
                   
return marriageBearingHistory;
         }

 
         
public void setMarriageBearingHistory(
                            MarriageBearingHistory marriageBearingHistory) 
throws Exception{
                   
this.marriageBearingHistory = marriageBearingHistory;                
         }

                   
 
         
/**
          * 病人退出
          * 
          * 
@return
          
*/

         
public ExitHistory  getExitHistory()  {
                   
if (exitHistory == null)
                            
return new ExitHistory(this);
                   
return exitHistory;
         }

 
         
public void setExitHistory(
                            ExitHistory exitHistory) 
throws Exception{
                   
this.exitHistory = exitHistory;          
         }

}

 
我觉得问题总结起来就是一句话:怎么在构造函数里,把参数EHR ehr传递给ExitMt target?
因为在EHR.java中,有以下几个跟“病人退出”有关的函数:    
          public  ExitHistory  getExitHistory()  {
                   
if (exitHistory == null)
                            
return new ExitHistory(this);
                   
return exitHistory;
         }

 
         
public   void  setExitHistory(
                            ExitHistory exitHistory) 
throws  Exception {
                   
this.exitHistory = exitHistory;          
         }

}
但是getExitHistory()里面又调用了构造函数。所以,如果用
Target=ehr.getExitHistory().getTarget()会导致死循环!
 
后来,我又想,由于target数据类型是ExitMt,尝试用ExitMt.java中的构造函数,new一个target出来。
/*    BaseExitMt.java 中的构造函数   */
         
//  constructors
          public  BaseExitMt ()  {
                   initialize();
         }

         
         
public  BaseExitMt (java.lang.Integer id)  {
                   
this.setId(id);
                   initialize();
         }

 
         
public  BaseExitMt (
                   java.lang.Integer id,
                   com.cdms.dataaccess.model.EhrMt ehr) 
{
                   
this.setId(id);
                   
this.setEhr(ehr);
                   initialize();
         }

所以我打算这么写:

 target = new  ExitMt(exitid,(EhrMt)ehr.getTarget());
// exitid的获取,我用了这句代码:
Integer exitid = (Integer)ehr.getExitHistory() .getId(); 


 [番茄花园1]这里target数据类型不能为EhrMt,须为ExitMt.
 [番茄花园2]问题出在这里!传进构造函数的参数是ehr对象,怎么由ehr对象得到ExitMt对象 target呢?
 
我参考原来系统里的例子。比如说,婚育史,由于婚育史form里的数据其实是来自EHRMT表格,所以target类型定义为EhrMt。
他的构造函数可以直接这样写:
private  EhrMt target;
public  MarriageBearingHistory(EHR ehr)
 {
         target = (EhrMt) ehr.getTarget();
}
感觉问题很简单,但是就是找不到解决的方法~加油!1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值