有条件地渲染一个primefaces命令链接

时间:2017-01-10 20:35:01

标签: jsf primefaces

我试图有条件地渲染一个命令链接。但是我发现在调试bean函数时,stockView.hasPortfolios永远不会被调用。这是用户呈现的正确方法还是我应该以另一种方式执行此操作?

public void hasPortfolios(){

     hasPortfolios = new HashMap<Boolean,String>();
      Collection<Portfolio> portfolios = user.getTrader().getPortfolios();
        Iterator<Portfolio> iter = portfolios.iterator();
        while(iter.hasNext()){
            Portfolio p = iter.next();
            if(p.getBalance() == 0){
                hasPortfolios.put(false, p.getMember().toString());
                logger.log(Level.INFO, "hasPortfolios false");
            }
            else
            {
                hasPortfolios.put(true,p.getMember().toString());
                logger.log(Level.INFO, "hasPortfolios true");
            }
        }
}

这是StocksView中的hasPortfolios方法(它是一个ViewScoped Bean)。 hasPortfolios变量是私有Map hasPortfolios;

{{1}}

2 个答案:

答案 0 :(得分:0)

在我看来,你应该像这样调用函数而不是使用方括号:

rendered="#{stocksView.hasPortfolios(orderBooks.bidOrderId.member.memberId)}

同时确保其公开,并且没有重载版本。

答案 1 :(得分:0)

像往常一样,我做错了一些事情。首先,我的地图在渲染属性中返回一个布尔对象,这必须是一个布尔基元。所以为了解决这个问题,我调用了booleanValue()

rendered="#{stocksView.hasPortfolios[orderBooks.bidOrderId.member.memberId].booleanValue()}"

此外,我的地图键/值的顺序错误,因此布尔值实际上是键而不是成员ID。

最后,我调用了getMember()。toString(),它将Member对象作为String返回,而不是通过调用getMember()。getMemberId()返回的实际成员ID字符串。所以hasPortfolios应该看起来像这样:

public void hasPortfolios(){

    logger.log(Level.INFO, "hasPortfolios start");

     hasPortfolios = new HashMap<String,Boolean>();
      Collection<Portfolio> portfolios = user.getTrader().getPortfolios();
        Iterator<Portfolio> iter = portfolios.iterator();
        while(iter.hasNext()){
            Portfolio p = iter.next();
            if(p.getBalance() == 0){
                hasPortfolios.put(p.getMember().getMemberId(),new Boolean(false));
                logger.log(Level.INFO, "hasPortfolios false");
            }
            else
            {
                hasPortfolios.put(p.getMember().getMemberId(),new Boolean(true));
                logger.log(Level.INFO, "hasPortfolios true");
            }
        }
} 

现在,当有用户的投资组合时,会显示卖出命令链接。

感谢大家的帮助,它指出了我正确的方向。