JSF+Hibernate 显示动态生成的表中的内容

来源:互联网 发布:手机淘宝如何朋友代付 编辑:程序博客网 时间:2024/05/18 16:19
先解释一下标题的意思。如果在runtime的时候生成了一张表(见博文:利用oracle的存储过程来建表、 Hibernate调用存储过程 分享),即动态表,此时无法做 ORM映射,因此无法创建pojo对象等。如果在这种情况下,仍然想在页面中通过<t:dataTable>标签来显示动态表中的内容,可通过下面的方法:

DAO:

public class TableDAO{        public List getRecordList(String tablename)   {    SQLQuery query = session.createSQLQuery("select * from "+tablename);    List list = query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)       .list();//把查询结果转换成map类型    return list;   }      public List getRecordHeaderList()   {   }     }


public class TableBean{ private DataModel recordModel; private DataModel headerModel; private int labelIndex = 0;   public DataModel getHeaderModel() {  if(headerModel == null)  {   headerModel =new ListDataModel();   headerModel.setWrappedData(getColumnHeaderList());  }  return headerModel; } public DataModel getRecordModel() {    if(recordModel== null)  {   recordModel=new ListDataModel();   recordModel.setWrappedData(getRecordList());          }      return  recordModel;   }  public String getColumnValue() {  if(recordModel == null) recordModel = getRecordModel();  if(recordModel.isRowAvailable())  {   Map map = (Map)recordModel.getRowData();   List list = getColumnHeaderList();   String key = list.get(labelIndex)).toString();   Object o = map.get(key);   if(o == null) o = "";   labelIndex++;   if(labelIndex == map.size()) labelIndex = 0;   return o.toString();  }  return null; }}

   页面:

<t:dataTable id="recorddata"                var="record"                value="#{tableBean.recordModel}"                preserveDataModel="false"                rows="100"           >           <t:columns value="#{tableBean.headerModel}" var="columnHeader">                <f:facet name="header">                    <h:outputText value="#{columnHeader.cname}" />                </f:facet>                <h:outputText value="#{tableBean.columnValue}" />           </t:columns>    </t:dataTable>

这个方法主要是利用了Myfaces的<t:columns>组件来实现动态表格的生成。

文章来源