我有这个支持bean:
@ManagedBean(name="testController")
public class TestController {
private String foo = "fooTest";
private List<A> alist;
public A fetchAlist(int index) {
alist = ListInflater.get(alist, A.class, index); //only used for incrementing list
return alist.get(index);
}
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
}
我想通过访问页面中的fetchAlist(x)来调用A类中的属性,如下所示:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head><title>Test</title></h:head>
<h:body>
<h:form>
Test List
<p:inputText value="#{testController.fetchAlist(2).aparam}" /><br /><br />
</h:form>
</h:body>
</html>
不幸的是,这还不行,因为EL将此列表理解为属性,但它不是属性而是方法。是否有可能实现这样的调用?
[UPDATE]
我发现所有这些都适用于 h:inputText ,所以这可能是PrimeFaces的错误吗?
答案 0 :(得分:1)
您可以使用括号表示法按索引引用列表项:
@ManagedBean
public class TestController {
private List<A> alist;
@PostConstruct
public void init() {
alist = createItSomehow();
}
public List<A> getAlist() {
return alist;
}
}
使用:
<p:inputText value="#{testController.alist[2].aparam}" />
如果您因某些原因希望对每个列表项执行延迟加载,那么最好的办法是提供自定义List
实现,其中您使用List#get(int)
方法执行所需的工作。