JSF+EJB3架构实际项目
评论
Put it very simple,for instance:
1) In Jsp(or xhtml) pages:
<div class="light col input-field">
<h:inputText id="staffName" value="#{xxxBean.staffQueryCondition.staffName}" required="true"/>
</div>
<div class="light col input-field">
<t:inputDate id="startTime" value="#{xxxBean.staffQueryCondition.startTime}" required="true"/>
</div>
<div class="light col output-field">
<t:inputDate id="endTime" value="#{xxxBean.staffQueryCondition.endTime}" rquired="true"//>
</div>
......
<!-- Display search result -->
<div id="result" class="section">
<t:dataTable id="staffList"
value="#{xxxBean.staffList}" var="staff"
renderedIfEmpty="false"
preserveSort="true"
rowIndexVar="rowIndex"
rows="#{searchAssetBean.searchResultWrapper.rowsPerPage-5}"
styleClass="datatable"
preserveDataModel="false"
first="0"
varDetailToggler="detailToggler">
<h:column>
<f:facet name="header">
<h:outputText value="#{msg.no}"/>
</f:facet>
<h:outputText value="#{rowIndex+1}"/>
</h:column>
<h:column>
<f:facet name="header">
<t:commandSortHeader columnName="name" arrow="true" >
<h:outputText value="#{msg.external_id}"/>
</t:commandSortHeader>
</f:facet>
<h:outputText value="#{staff.name}"/>
</h:column>
......
</t:dataTable>
</div>
2) JSF managed bean examples:
public class xxxBean extends xxxManagedBean
{
static final Logger log=Logger.getLogger("xxxBean");
private StaffQueryCondition staffQueryCondition;
private List<Staff> staffList;
......
public String query()
{
staffList=xxxxSessionBean.get(staffQueryCondition);
....
return "xxxView";
}
}
如果用你说的PO一对象从持久层传到页面,就有一个这样的问题,我做一个员工的查询,我的员工PO类中只有入职时间,我现在要做个组件条件查询在某个时间段入职的员工,这里是不是得再构造个类似ActionForm对象了。请指教。。
"但感觉显示层的显示对象还是需要的,要不然有些数据在页面显示会有麻烦"
I think if you have tried JSF a little bit, you will find out that how easy and well JSF handles this matter.
1) In Jsp(or xhtml) pages,the jsf components look like following:
<div class="light col input-field">
<h:inputText id="mediaName" value="#{mediaBean.media.name}" size="50" maxlength="50" required="true"/>
</div>
<div class="light col output-field">
<h:outputText id="mediaComments" value="#{mediaBean.media.comments}"/>
</div>
<div class="light col input-field">
<h:selectOneMenu id="format" value="#{mediaBean.media.format.id}" validator="#{mediaBean.validateSelection}" required="true">
<f:selectItems value="#{mediaBean.tapeFormatList}"/>
</h:selectOneMenu>
/div>
mediaBean: JSF managed Beans
media: Pojo(+annotation),entity bean
name,comments,format: properties of Entity bean "Media"
tapeFormatList: List<SelectItem>
2) JSF managed bean examples:
public class MediaBean extends CmmManagedBean
{
static final Logger log=Logger.getLogger("MediaBean");
private Media media;
private List tapeSegmentList;
private boolean validAssetFlag;
private boolean validMediaFlag;
private boolean editFlag;
private int labelOffset;
......
}
3) Entity Bean
package uk.co.ondemand.cmm.service.persistence;
import java.util.Date;
import javax.persistence.*;
@Entity
@Table(name = "CMM_MEDIA_ASC")
public class Media extends GenericEntity
{
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ")
@SequenceGenerator(name="SEQ", sequenceName="asset_container_id", allocationSize=1)
@Column(name = "ID", nullable = false)
protected long id;
@Column(name = "CONTAINER_TYPE", nullable = false,insertable=false, updatable=false)
private String containerType;
@Column(name = "NAME", nullable = false)
private String name;
@Column(name = "COMMENTS")
private String comments;
@JoinColumn(name = "FORMAT", referencedColumnName = "ID")
@ManyToOne
private CmmEnumeration format=new CmmEnumeration();
@Transient
private List foldersList;
//use "Transient" annotion for additional fields not persistent,but used in JSF component value binding for carrying data.
.....
/** Creates a new instance of Media */
public Media() {
}
/**
* Gets the id of this AssetContainer.
* @return the id
*/
public long getId() {
return this.id;
}
/**
* Sets the id of this AssetContainer to the specified value.
* @param id the new id
*/
public void setId(long id) {
this.id = id;
}
.....
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public CmmEnumeration getFormat() {
return this.format;
}
public void setFormat(CmmEnumeration format) {
this.format = format;
}
......
}
4) You also can use converters for some data type conversion between pages to models
faces-config.xml
...
<converter>
<converter-for-class>java.lang.Boolean</converter-for-class>
<converter-class>uk.co.ondemand.cmm.web.jsf.YesNoBooleanConverter</converter-class>
</converter>
<converter>
<converter-for-class>java.util.Date</converter-for-class>
<converter-class>uk.co.ondemand.cmm.web.jsf.CmmDateTimeConverter</converter-class>
</converter>
<converter>
<converter-for-class>java.sql.Timestamp</converter-for-class>
<converter-class>uk.co.ondemand.cmm.web.jsf.CmmDateTimeConverter</converter-class>
</converter>
.....
<managed-bean>
<managed-bean-name>mediaBean</managed-bean-name>
<managed-bean-class>uk.co.ondemand.cmm.web.managedbean.MediaBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Hope this is helpful.
The main reasons are as following:
1) “显示对象”(Is it like actionForm in Struts1?), VO and PO are not needed any more,and use POJOs(+Annotation) as EJB3 entity Bean,which could also be used as VO,and be passed to web layer.In JSF "managed beans" and JSPs( or xhtml),use these beans as JSf compoment value binding objects.
In some cases, we need add some wrapper classes which may wrap several POJOs(EJB3 entity beans) for conmunication between web layer and business logic layer.
2) In EJB3 Session Bean,"EntityManger" is used for data handling. You will soon find out that DAO layer seems unnecessary. Consider no DAO layer first,add it when absolutely needed in case very complex business logic.
In my previous project using JSF+EJB,put it simply,the pattern is "Facelets--> .xhtml--> managedBean-->EJB Session Bean--> EJB3 Entity Bean -> database".
we use POJOs(+some wrapper classes) 1)for page component binding(in jsp or .xhtml); 2)for data transfer(as VO)between layers;and 3)for data persistence(as PO). This dramatically reduces the code for data conversion.
我说的显示对象就是类似Struts的ActionFrom的东西。
很是受你的启发。我也一直觉得这样设计太过复杂,而且走入了SSH的圈套,大量的Bean的创建,属性挎贝执行效率会受影响。我目前新的设计见附图。也像你说的:Facelets --> ManagedBean -->EJB3 SessionBean(业务层) -->JPA (持久层) ---> DataBase(EIS层).这样就把Dao层去了,把VO和PO合并了,但感觉显示层的显示对象还是需要的,要不然有些数据在页面显示会有麻烦(robbin很早的一个帖子就讨论过这个问题)。请指点。。。
最近有个想法,不过没有时间去做,因为spring和hibernate从功能上来讲,和EJB没有太大的差别,除却AOP外,spring的功能与EJB Stateless Session一样,Hibernate和CMP一样,由于这些技术都基于配置,而且基本的参数类型也比较相似,所以可以使用spring,hibernate进行开发,用EJB运行,spring和hibernate的配置文件是可以转换为EJB配置的,这样一方面可以利用spring和hibernate进行便捷的开发,同时还可以利用EJB的优异性能进行运行。
The main reasons are as following:
1) “显示对象”(Is it like actionForm in Struts1?), VO and PO are not needed any more,and use POJOs(+Annotation) as EJB3 entity Bean,which could also be used as VO,and be passed to web layer.In JSF "managed beans" and JSPs( or xhtml),use these beans as JSf compoment value binding objects.
In some cases, we need add some wrapper classes which may wrap several POJOs(EJB3 entity beans) for conmunication between web layer and business logic layer.
2) In EJB3 Session Bean,"EntityManger" is used for data handling. You will soon find out that DAO layer seems unnecessary. Consider no DAO layer first,add it when absolutely needed in case very complex business logic.
In my previous project using JSF+EJB,put it simply,the pattern is "Facelets--> .xhtml--> managedBean-->EJB Session Bean--> EJB3 Entity Bean -> database".
we use POJOs(+some wrapper classes) 1)for page component binding(in jsp or .xhtml); 2)for data transfer(as VO)between layers;and 3)for data persistence(as PO). This dramatically reduces the code for data conversion.
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 425 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
一个基于RBAC模型的通用权 ...
部门就是一个管控范围的概念 这个术语业务逻辑范畴 不用设计到RBAC里面
-- by Joo -
一个基于RBAC模型的通用权 ...
项目中也有这东西 看了你的图有点清楚了 permission 里放的是资源加操作 ...
-- by lanhongbo -
一个基于RBAC模型的通用权 ...
竟然和我自己弄的一样。。。除了个别表名不同问下Operation表里面存的数据是 ...
-- by e_water_boy -
一个基于RBAC模型的通用权 ...
典型的第一级RBAC 用Hibernate或者JPA跟这个有什么关系? 何况,H ...
-- by Joo -
JSF+EJB3架构实际项目
怎么不用SEAM?
-- by wetouns






评论排行榜