0

我有这个支持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 将此列表理解为属性,但它不是属性而是方法。有没有可能实现这样的调用?

[更新]
我发现这一切都适用于h:inputText,所以也许这是一个 PrimeFaces 错误?

4

1 回答 1

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)方法。

于 2012-10-18T15:35:26.903 回答