是否可以使用UIInput值中的参数调用方法?

时间:2012-10-18 15:17:13

标签: jsf jsf-2 properties primefaces

我有这个支持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的错误吗?

1 个答案:

答案 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)方法执行所需的工作。