新的起点 新的开始

快乐生活 !

ADF(ORACLE JEE 平台)中Table的显示detail功能的使用

        ADF(Application development Framework)是Oracle主推的JEE平台的解决方案,其中包括JDeveloper (开发IDE),Weblogic(Server 容器),ADF Faces(JSF 实现), ADF richFaces(JSF 中扩展组件)等等。
本文主要讨论ADF Faces中,如何控制显示Table的Details信息。

        ADF Table类似于JSF标准的Table,但提供许多更有用的功能。比如显示Datail就是很好的功能,如下图:用户可以点击首列小图表,查看本行详细信息
      


如下图显示:

下面是相对应的JSP和BackingBean

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=GBK"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://xmlns.oracle.com/adf/faces" prefix="af"%>
<%@ taglib uri="http://xmlns.oracle.com/adf/faces/html" prefix="afh"%>
<f:view>
  
<afh:html>
    
<afh:head title="tableTest">
      
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
      
<style type="text/css">
      body 
{
}

      a:link 
{ color: #ffa5a5; }
    
</style>
    
</afh:head>
    
<afh:body>
      
<h:form>
        
<af:table width="98%" value="#{tableTest.allData}" var="data"
                  emptyText
="No Data"
                  disclosureListener="#{tableTest.showDetails}"
 banding="none"
                  varStatus
="vs">
          
<af:column sortable="true" formatType="icon"
                     inlineStyle
="border-color:rgb(0,0,0); border-width:thin; margin:auto; text-align:center;">
            
<f:facet name="header">
              
<af:outputText value="NO."/>
            
</f:facet>
            
<af:outputText value="#{data.column1}"/>
          
</af:column>
          
<af:column  inlineStyle="border-color:rgb(0,0,0); border-width:thin; margin:auto; text-align:center;">
            
<f:facet name="header">
              
<af:outputText value="Last Name"/>
            
</f:facet>
            
<af:outputText value="#{data.column2}"/>
          
</af:column>
          
<af:column  inlineStyle="border-color:rgb(0,0,0); border-width:thin; margin:auto; text-align:center;">
            
<f:facet name="header">
              
<af:outputText value="First Name"/>
            
</f:facet>
            
<af:outputText value="#{data.column3}"/>
          
</af:column>
          <f:facet name="detailStamp">
            <af:panelGroup layout="vertical">
              <af:outputText rendered="#{tableTest.showDetail}"
                             value="#{data.detail}"/>
               <af:outputText rendered="#{tableTest.showDetail}"
                             value="#{data.detail}"/>
                <af:outputText rendered="#{tableTest.showDetail}"
                             value="#{data.detail}"/>

            
</af:panelGroup>
          
</f:facet>
        
</af:table>
      
</h:form>
    
</afh:body>
  
</afh:html>
</f:view>

其中红色部分JSP就是显示Details信息。
disclosureListener="#{tableTest.showDetails}" 为Table加一个打开关闭Details信息的监听器,在监听器里面控制显示。

BackBean如下:

public class TableDataBackBean {
    
private List allData = new ArrayList();
    
private boolean showDetail = false
    
public TableDataBackBean() {
        TableData tableDate1 
= new TableData("1","vincent","ma","vincent ma'detail");
        TableData tableDate2 
= new TableData("2","barry","fan","barry fan'detail");
        TableData tableDate3 
= new TableData("3","jeny","chen","jeny chen'detail");
        TableData tableDate4 
= new TableData("4","ross","han","ross han'detail");
        TableData tableDate5 
= new TableData("5","robin","liu","robin liu'detail");
        TableData tableDate6 
= new TableData("6","walker","liu","walker liu'detail");
        allData.add(tableDate1);
        allData.add(tableDate2);
        allData.add(tableDate3);
        allData.add(tableDate4);
        allData.add(tableDate5);
        allData.add(tableDate6);

    
    }


    public void showDetails(DisclosureEvent disclosureEvent) {
        if(disclosureEvent.isExpanded()){
          this.showDetail = true;
          }

    }


    
public void setAllData(List allData) {
        
this.allData = allData;
    }


    
public List getAllData() {
        
return allData;
    }


    
public void setShowDetail(boolean showDetail) {
        
this.showDetail = showDetail;
    }


    
public boolean isShowDetail() {
        
return showDetail;
    }

}

当用户点击打开小图标时,触发如下事件:
    public void showDetails(DisclosureEvent disclosureEvent) {
        if(disclosureEvent.isExpanded()){
          this.showDetail = true;
          }
    }


那么,如何只让它显示一个Detail 信息呢? 也就是打开第二个时,关闭第一个呢? 很简单
修改showDetails方法如下:
    public String oldValue = "";
    
public void showDetails(DisclosureEvent disclosureEvent) {
        CoreTable activityTable1 
= (CoreTable)disclosureEvent.getComponent();
        
if(disclosureEvent.isExpanded()){
          
this.showDetail = true;
          }

          
        RowKeySet rowKeySet2  
= activityTable1.getDisclosureState();
          Set set 
=rowKeySet2.getKeySet();
          Iterator iterator 
= set.iterator();
          
if(set.size()==2){
             
while(iterator.hasNext()){
              String temp 
= (String)iterator.next();
                 System.out.println(
"Old Value:"+oldValue);
              System.out.println(
"Two value:"+temp);
              
if(!temp.equals(oldValue)){
                  oldValue 
= temp;
                  System.out.println(
"Set Older Value ="+temp);
                  
break;
              }

             }

             set.clear();
             set.add(
new String(oldValue));
             System.out.println(
"Display:"+oldValue);
          }
else if(set.size()==1){
              
while(iterator.hasNext()){
               String temp 
= (String)iterator.next();
                   oldValue 
= temp;
              }

              set.add(
new String(oldValue));
              System.out.println(
"only One Display:"+oldValue);
          }


          
         activityTable1.setDisclosureState(rowKeySet2);
    }

posted on 2009-08-02 21:00 advincenting 阅读(1650) 评论(1)  编辑  收藏

评论

# re: ADF(ORACLE JEE 平台)中Table的显示detail功能的使用 2009-08-04 12:23 个性艺术签名

斯柯达萨丹哈速度啊随的  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

公告

Locations of visitors to this page

导航

<2009年8月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

常用链接

留言簿(13)

随笔分类(71)

随笔档案(179)

文章档案(13)

新闻分类

IT人的英语学习网站

JAVA站点

优秀个人博客链接

官网学习站点

生活工作站点

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜