Lin*_*k19 3 java datatable jsf el set
我知道UIData不支持这个,我理解为什么,但这对于使用JPA和JSF的人来说应该是一个常见问题,因为在映射M2M O2M关系时,Sets是优秀的集合.
我知道我需要创建一些结构,以便在需要时将我的属性转换为列表,但在广泛搜索这个问题之后我能找到的原因是它不起作用的原因,并且只有一些解决方案的提示.
我相信答案是创建一个ELResolver来处理这个问题,但是它们的结构以及它们的工作方式令我感到困惑,我不明白为什么我需要成为一个写这个的人,这是一个常见问题,当然有人有写了一个ELResolver这样做?
我已经找到了关于这个主题的这篇文章,但我无法复制它,因为较新的JSF似乎不允许它:
http://techblog.bozho.net/?p=28&cpage=1#comment-13700
还有这个:
http://www.jroller.com/mert/entry/settolistpropresolver_for_jsf_el
其中充斥着已弃用的代码,因为它是ELResolver之前的代码.但我只是找不到如何实现ELResolver来做到这一点.有人能指出一些有效的代码或至少类似的东西,可以帮助我了解如何使用ELResolver吗?
一些轻松,支持Set(实际上,整个Collection接口)DataModel是可以在JSF 2.2.它目前已作为快照提供,因此您可以开始开发.它将在Q2附近发布.
更新:根据评论,它似乎与Spring Web Flow无缝协作.事实证明,它不兼容JSF 2.2(最初也不兼容JSF 2.1).那么,定制ELResolver应该是你最好的选择.
最简单的是让它扩展ListELResolver如下:
public class SetToListELResolver extends ListELResolver {
public static final String KEY_PROPERTY = "setToList";
@Override
public Object getValue(ELContext context, Object base, Object property) {
if (base instanceof Set<?> && KEY_PROPERTY.equals(property)) {
context.setPropertyResolved(true);
return new ArrayList<Object>((Set<?>) base);
}
return super.getValue(context, base, property);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你在下面注册它 faces-config.xml
<application>
<el-resolver>com.example.SetToListELResolver</el-resolver>
</application>
Run Code Online (Sandbox Code Playgroud)
然后你就可以在语法中使用它,#{bean.set.setToList}其中.setToList是一个特殊属性,它将触发转换:
<h:dataTable value="#{bean.set.setToList}" ...>
Run Code Online (Sandbox Code Playgroud)
它将有效地结束虚构
<h:dataTable value="#{new ArrayList(bean.set)}" ...>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2466 次 |
| 最近记录: |