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

先解释一下标题的意思。如果在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>组件来实现动态表格的生成。

文章来源

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值