我现在在做病人退出的页面,数据表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;
/** */ /**
* 病人退出
*
* @stereotype Interface
*/
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);
}
}
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;
/** */ /**
* 病人退出
*
* @stereotype Interface
*/
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());
}
}
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;
}
}
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;
}
}
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();
}
// 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();
// 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