栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JSF问题的解决

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JSF问题的解决

我花了相当长的时间试图找到以下JSF问题的解决方案:不可能在java.util-Set上迭代。
-UI:重复(Facelets)不起作用
-A4j:重复(富面孔)不起作用
-c:forEach工作.只有在不依赖父组件定义的变量的情况下(例如,rich:dataTable)

所有这些都是相当合乎逻辑的现象,因为UIData依赖于有序的数据,而且通常一个集合是不有序的。

在我的例子中,我必须使用Hibernate(JPA)对象(PersistentSet)中定义的集合。
一个重要的注意事项:您应该使用一个集合,以防视图顺序与您无关。

解决办法.很简单。在下一个版本中,我建议它是facelets/richFaces的一部分,当然,除非有一些有效的具体理由不这样做。

1.定义自己的UI组件,扩展现有的中继器组件。我使用了一个4j:重复(HtmlAjaxRepeat)
2.覆盖metohd getDataModel
3.在Faces-config中定义组件
4.创建自定义fac卷标记定义
5.在web.xml中定义指向faclet标记定义的上下文变量。

注意:为了用于JSP而不是Facelets,您应该定义一个.tld和一个标记处理程序,这不是本文的Ojbect。

现在让我们详细地看看这些步骤:

1,2.以下是一些代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

package com.myproject.components;

import java.util.ArrayList;

import java.util.Set;

import javax.faces.model.DataModel;

import javax.faces.model.ListDataModel;

import org.ajax4jsf.component.html.HtmlAjaxRepeat;

import org.ajax4jsf.model.SequenceDataModel;

public class UIIterator extends HtmlAjaxRepeat {

 @SuppressWarnings("unchecked")

 @Override

 protected DataModel getDataModel() {

 Object current = getValue();

 if(current instanceof Set){

 return new SequenceDataModel(new ListDataModel(

 new ArrayList((Set) current)));

 }

 return super.getDataModel();

 }

}

因此,由于我们不关心元素的顺序,我们只是在集合之外创建了一个新的ArrayList。现在,我们可以轻松地返回批准的海盗行为数据模型。

3.将此添加到您的Faces-config中。(我从a4j定义中复制了它)


https://movie.douban.com/people/246110479/

1

2

3

4

5

6

7

8

9

10

11

 

 Iterator

 com.myproject.Iterator

 com.myproject.components.UIIterator

 

 javax.faces.Data

 org.ajax4jsf.components.RepeatRenderera

 

 

4.这是facelets的标记定义。

https://www.douban.com/note/812043730/

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"

"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">

http://myproject.com/cust

repeat

com.myproject.Iterator

org.ajax4jsf.components.RepeatRenderer

将此文件保存为/web-INF/facelets/custom.taglib.xml。

5.将web.xml添加到


https://greasyfork.org/he/scripts?set=476094

1

2

3

4

facelets.LIBRARIES

/WEB-INF/facelets/custom.taglib.xml

6.现在可以使用

1

2

3

4

5

6

7

...

xmlns:cust"

...

...

我认为它比其他解决方案要整洁得多,比如定义一个定制的EL Resolver。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270920.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号