`
暗夜骑士0376
  • 浏览: 80190 次
  • 性别: Icon_minigender_1
  • 来自: 信阳
社区版块
存档分类
最新评论

<h:dataTable/> <h:commandLink/> 的一种解决方案

阅读更多
当我们使用<h:dataTable/> 里面嵌入<h:commandLink/>的时候,我们会发现当我们点击commandlink的时候是响应后台的方法的。这是什么原因呢?这还要从JSF的六个生命周期来说起。而罪魁祸首就是JSF前面几个周期惹的祸。当我们点击commandLink的时候,他是会提交表单的,但是你的dataTable里的迭代的值,我想JSF应该不能那么聪明的把每个值重新部署回到你的后台的一个List的容器中。反向操作太难了。在前几个阶段,如果你manageBean是RequestScope的阶段。那么他会重新初始化一个view视图,这个时候,如果你的dataTable并不是初始就加载的话。那里么是不能显示的。那么这个<h:comamndLink/>就不能被解析,尽管我们之前已经提交了一个action,但是到更新模型值的时候,你就不能解析到这个控件。所以你看到的就是一个重新刷新的页面。该怎么解决?
一种方案是说把 requestScope 变成 sessionScope 这个确实很简单。而且按照我上面讲的原理也能解释为什么sessionScope能够被执行。但是如果在JSP/Servlet 时候,我们就是只是用一个param就解决问题了。如果我们的所有的数据都是放在sessionScope下,我感觉服务器的负载会很大。
可以说也许很多人会对JSF的周期很是愤怒,很是无可奈何?但是成也萧何,败也萧何。我的解决方案,恰恰是在JSF周期进行解决。但是前提是我们的控制逻辑要写好
解决方案:
假设我们的场景是,每一行的数据都有一个edit的link和一个detail的link
我们要做的就是将<h:comamndLink/> 改为<h:link/> outcome 里面加上我们要加载的数值。然后后台bean的解决代码是
@PostConstruct
public void checkControler()
{
     //首先是请求获得的资源viewId
     String viewId = .....
    //然后根据资源的viewId来获得我们pass的参数beanId
    //然后,我们根据这个beanId 从数据库或者缓存池中获得bean对象。对requestScope的bean对象进行了初始化。
   //然后我们在新的页面上进行显示edit,获得detail的数据
}


我的这种方案,只是解决了点击一个链接的问题,当然如果是一个在本页的操作,我们也是可以执行了,比如说delete操作,JSF在前几个周期的时候 仍然是可以接收到我们传来的beanId的值,但是,然后我们还是在那里将操作进行execute。
这只是我们解决方案,欢迎大家来讨论。毕竟这个<h:dataTable/> 和<h:commandLink/>结合的场景很是常见。
分享到:
评论

相关推荐

    人事信息管理系统

    &lt;p style="text-align:center"&gt; &lt;h:outputLink value="/faces/add.jsp"&gt;添加一条&lt;/h:outputLink&gt; &lt;h:form&gt; &lt;h:dataTable value="#{loginBean.persons}" var="person" border="5" cellpadding="5" cellspacing...

    Microsoft ADO.NET Step by Step

    &lt;br/&gt; Part III - Manipulating Data &lt;br/&gt;Chapter 6 - The DataSet &lt;br/&gt; &lt;br/&gt;Chapter 7 - The DataTable &lt;br/&gt; &lt;br/&gt;Chapter 8 - The DataView &lt;br/&gt; &lt;br/&gt; Part IV - Using the ADO.NET Objects &lt;br/&gt;Chapter 9 ...

    C# Winform实现导入和导出Excel文件

    本文实例为大家分享了Winform实现导入导出Excel文件... /// &lt;param name=dataTable&gt;数据集&lt;/param&gt; /// &lt;param name=isShowExcle&gt;导出后是否打开文件&lt;/param&gt; /// &lt;returns&gt;&lt;/returns&gt; public static bool DataTable

    C#天气预报控件

    /// &lt;returns&gt;返回支持省直辖市的数据表&lt;/returns&gt; public static DataTable getSupportProvince() /// &lt;summary&gt; /// 通过省/直辖市/市的拼音获取支持的市/县的数据表 /// 返回数据表包含字段Name,CenterName...

    .NET DbHelper 数据访问类(MSSQL Mysql ORACLE)

    /// &lt;returns&gt;DataTable 对象。&lt;/returns&gt; DataTable GetDataTable(string sql, int start, int length); /// &lt;summary&gt; /// 执行Insert、Update、Delete等操作,并返回受影响的记录数。 /// &lt;/summary&gt; /// ...

    ASP.net技术内幕

    &lt;br/&gt;11.3.7 使用模板编辑DataGrid控件中的条目 &lt;br/&gt;11.4 小结 &lt;br/&gt;&lt;br/&gt;第12章 操作DataSet &lt;br/&gt;&lt;br/&gt;12.1 理解DataSet &lt;br/&gt;12.1.1 DataSet的元素 &lt;br/&gt;12.1.2 向DataSet添加DataTable &lt;br/&gt;12.1.3 将控件绑定...

    xml通用操作类.txt(.net)

    /// &lt;returns&gt;DataTable&lt;/returns&gt; /// &lt;summary&gt; /// 读取XML资源中指定的DataTable的指定行指定列的值 /// &lt;/summary&gt; /// &lt;param name="source"&gt;XML资源&lt;/param&gt; /// &lt;param name="xmlType"&gt;XML资源类型:...

    EXCEL导入导出

    /// &lt;param name="Table"&gt;DataTable对象&lt;/param&gt; /// &lt;param name="ExcelFilePath"&gt;Excel文件路径&lt;/param&gt; /// &lt;returns&gt;&lt;/returns&gt; /// &lt;summary&gt; /// 获取指定Excel文件数据表的数据列列表 /// &lt;/summary&gt;...

    JSF2datatable分页控件与左侧菜单

    &lt;/h:dataTable&gt; &lt;ems:page id="pageId" for="tableId" maxPage="5" /&gt; 2. 相应的Managedbean: [java] view plaincopy /** * EMS 11185 限时未达邮费奉还 * @author 螃蟹 */ @SuppressWarnings(value ...

    JSF2.xdatatable分页控件与左侧菜单最简单应用

     提示:&lt;e:menu value="#{menuBean.model}" action="#{menuBean.navigationAction}"&gt;&lt;/e:menu&gt;中的menuBean是你自己定义的managedbean, 并且要extends EMS11185MenuBean; action="#{menuBean.navigationAction...

    C# EXCEL导入导出类

    /// &lt;param name="fileName"&gt;Excel全路径文件名&lt;/param&gt; /// &lt;returns&gt;导入成功的DataSet&lt;/returns&gt; public DataSet ImportExcel(string fileName) /// &lt;summary&gt; /// 把DataTable导出到EXCEL /// &lt;/...

    .net 各种实用方法

    &lt;summary&gt;拼接DataTable,返回ArrayList 数组&lt;/summary&gt; &lt;param name="dgv" /&gt; &lt;returns /&gt; &lt;remarks /&gt; &lt;/member&gt; - &lt;member name="M:Pic_Chart_Load.file_deal.Create_File_Out_Sql(System.Byte[],System...

    分页存储过程执行

    一个C#分页存储过程类,参数灵活 /// &lt;/summary&gt; /// &lt;param name="gridViewName"&gt;表名&lt;/param&gt; /// &lt;param name="ProcName"&gt;存储过程名&lt;/param&gt; /// &lt;param name="fieldName"&gt;查询字段&lt;/param&gt; /// &lt;param ...

    dorado5高级用法,原理,特性完整教程

    &lt;Control type="DataTable" dataset="datasetCustom" id="tableCustom" width="100%"&gt; &lt;Column field="EMPLOYEE_ID" name="EMPLOYEE_ID"/&gt; &lt;Column field="DEPT_ID" name="DEPT_ID"/&gt; &lt;Column field="EMPLOYEE_...

    CsvHelper_CSV帮助类

    /// &lt;param name="dt"&gt;DataTable&lt;/param&gt; /// &lt;param name="strFilePath"&gt;物理路径&lt;/param&gt; /// &lt;param name="tableheader"&gt;表头&lt;/param&gt; /// &lt;param name="columname"&gt;字段标题,逗号分隔&lt;/param&gt; public ...

    richfaces-ui-3.2.0.GA-bin.part2.rar

    &lt;br&gt;&lt;br&gt;* DataTable Sorting &lt;br&gt;* DataTable Filtering &lt;br&gt;* Calendar month and year manual selection &lt;br&gt;* Objects selection for suggestion box &lt;br&gt;* Standard component skinning &lt;br&gt;* Client-side EL ...

    c# Excel 操作类

    /// &lt;returns&gt;&lt;c&gt;true&lt;/c&gt;操作成功&lt;c&gt;false&lt;/c&gt;操作失败&lt;/returns&gt; public bool InsertTable(System.Data.DataTable dt, Excel.Worksheet ws, int startX, int startY) { try { for (int i = 0; i &lt;= dt....

    asp.net实现数据从DataTable导入到Excel文件并创建表的方法

    /// &lt;param name=dataTable&gt;数据源&lt;/param&gt; /// &lt;param name=AbsoluteExcelFilePath&gt;Excel文件的绝对路径&lt;/param&gt; /// &lt;param name=TblColName&gt;TBL里对应的列名&lt;/param&gt; /// &lt;param name=ColumnName&gt;E

    ExcelAspNet

    在项目中只须添加引用cwyExcelXml.dll便可&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;cwyCreateExcelXml(System.Data.DataSet ds, string PathFileName, bool isHeader) &lt;br&gt; //功能:把DataSet 类型数据存储为excel 支持的xml格式.(此格式...

    C# WinForm 打印报表文件

    窗体打印报表文件 ... /// &lt;param name="TableName"&gt;DataTable名称,与创建的DataSet里面的表名称相同&lt;/param&gt; /// &lt;param name="list"&gt;承载数据的列表&lt;/param&gt; /// &lt;param name="param"&gt;报表的参数&lt;/param&gt;

Global site tag (gtag.js) - Google Analytics