2012-10-18 91 views
0

我有这样的支持bean:是否可以使用UIInput值中的参数调用方法?

@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错误?

回答

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)方法做所需的工作。

+0

我不明白这应该如何工作(并且它不是因为它试图访问一个空列表,应用程序实际上什么都不做)。如果我使用列表中的标准getter和setter,它永远不会实例化。此外,通常的getter不提供我的ListInflater,它实例化并在索引指定的列表内生成尽可能多的条目。也许我可以通过某种方式将你的标记索引传递给我的列表,但是怎么做? – Bevor

+0

您需要预先初始化(后)构造函数中的列表。我已经编辑了答案,对不起,我认为这很明显。 – BalusC

+0

在相关说明中,我不知道为什么要尝试像这样设计它,但这毕竟是一种气味,因为您显然没有必要自行预先初始化列表。也许你实际上在寻找这样的东西? http://stackoverflow.com/questions/3409053/jsf2-can-i-add-jsf-components-dynamically/3409511#3409511 – BalusC

相关问题