sp0*_*00m 6 java jsf el map javabeans
有没有什么方法可以覆盖JSF从表达式语言访问bean字段的方式?我们的想法是模仿这种行为以访问一个Map<String, ?>值,其中bean字段将是映射键.
换句话说,无论如何都可以使用#{beanContainingNestedMap.keyOfSaidNestedMap},就好像keyOfSaidNestedMap是一个领域的beanContainingNestedMap?
如果没有,我可以提供其他解决方案吗?
例:
Holder.java
public class Holder {
private Map<String, Object> objects = new HashMap<String, Object>();
public void add(String key, Object value) {
objects.put(key, value);
}
public Object getObject(String key) {
return objects.get(key);
}
}
Run Code Online (Sandbox Code Playgroud)
ExampleBean.java
public class ExampleBean {
private Holder holder = new Holder();
public ExampleBean() {
holder.add("foo", 42);
holder.add("bar", 'X');
}
public Holder getHolder() {
return holder;
}
}
Run Code Online (Sandbox Code Playgroud)
example.xhtml
<c:out value="#{exampleBean.holder.foo}" /> <!-- should print "42" -->
<c:out value="#{exampleBean.holder.bar}" /> <!-- should print "X" -->
Run Code Online (Sandbox Code Playgroud)
如果我可以做类似的伪代码(因为我不知道是否存在这样的方法;)),那将是多么伟大的事情:
@Override // override JSF's (if any...)
public Object resolveEl(String el) {
try {
super.resolveEl(el);
} catch (ElException e) {
Object bean = e.getBean();
String fieldName = e.getFieldName();
if (bean instanceof Holder) {
Holder holder = (Holder) bean;
Object value = holder.getObject(fieldName);
if (value == null) {
throw e;
} else {
return value;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Zaw*_* oo 16
您可以直接使用EL映射.
Holder.java
public class Holder {
private Map<String, Object> objects = new HashMap<String, Object>();
public void add(String key, Object value) {
objects.put(key, value);
}
public Map<String, Object> getObjectsMap() {
return objects;
}
}
Run Code Online (Sandbox Code Playgroud)
EL
#{exampleBean.holder.objectsMap[your-key]}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26558 次 |
| 最近记录: |