Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 413|回复: 0

[jsf学习]JSF实例学习--组件显示(隐藏)与数据排序

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-10 02:51:44 | 显示全部楼层 |阅读模式
    JSF中处理组件的显示和隐藏、数据的排序等相对其它框架非常容易和直接了当, 常被教科书作为实例分析和讲解。下面这个实例来自名为《 Mastering JavaSErver Faces中文版》的书(略有改动),通过组件的显示(或隐藏)及数据的排序来讲解JSF中UI组件的用法。
        先看看它的界面共三个(1)index.jsp,

       
    (2)ModifyInvoice.jsp,这个修改发票界面有一个显示(隐藏)按钮,点击时可显示(或隐藏)部分组件。
      

      
      
      
       
       
       

       
      
    (3)ViewInvoices.jsp,显示全部发票的列表。并可以按发票序号和数额排序。      主要看看这个页面中,当点击发票的发票序号时如何正确返回到ModifyInvoice.jsp页面(在我们自己的实践当中一定要遇到的问题啊,通常的做法是超链接当中带参数)。当然首先要在faces-config.xml文件中定义导航法则:
    <navigation-rule>
       <from-view-id>/ViewInvoices.jsp</from-view-id>
       <navigation-case>
         <from-outcome>modifyInvoice</from-outcome>
         <to-view-id>/ModifyInvoice.jsp</to-view-id>
       </navigation-case>
    </navigation-rule>     从源码可以知道这个页面通过一个 <h:dataTable>标记来显示所有发票。 <h:dataTable id="table" value="#{viewInvoicesPage.invoices}" var="invoice" styleClass="MediumTable" >
    <h:column>
    ...
      <h:commandLink id="viewInvoice" styleClass="Link" title="View invoice details"
       value="#{invoice.invoiceNumber}"    action="#{viewInvoicesPage.modifyInvoice}">
       <h:outputText id="invoiceNumber" value="#{invoice.invoiceNumber}"/>
      </h:commandLink>
    .....
    </h:column>
    </h:dataTable> 从上看出,当我们点击发票的序号时,JSF调用viewInvoicesPage.modifyInvoice方法。
    1. public String modifyInvoice() {
    2.         FacesContext facesContext = FacesContext.getCurrentInstance();
    3.         
    4.         UIViewRoot root = facesContext.getViewRoot();
    5.         UIData table = (UIData) root.findComponent("invoiceForm").findComponent("table");
    6.         InvoiceBean invoice = (InvoiceBean) table.getRowData();
    7.         ValueBinding binding = facesContext.getApplication().createValueBinding("#{modifyInvoicePage}");
    8.         ModifyInvoicePage detailPage = (ModifyInvoicePage) binding.getValue(facesContext);
    9.    
    10.         detailPage.setInvoice(invoice);
    11.         
    12.         return "modifyInvoice";
    13.     }
    复制代码
    如此看来,当用 <h:dataTable>标记显示数据时,聪明的JSF用getRowData()可以知道你点击了那一行(即那一个发票号,这实际上是JSF将<h:commandLink>标记转为HTML链接时自动加上了行索引),再将这一行数据传给 ModifyInvoice.jsp页。



      
      
       
       

         
       

         
       
      



    源码下载:http://file.javaxxz.com/2014/10/10/025142125.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 18:15 , Processed in 0.356117 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表