根据primefaces评级呈现元素

时间:2014-08-28 22:30:00

标签: jsf-2 primefaces

我开始使用primafaces,我想出了以下场景。用户评分和元素,如果评级有效,则出现跨区块或根据具体情况隐藏。我基于这里的例子:(http://www.primefaces.org/showcase/ui/input/rating.xhtml)和ajax方法。请注意,如果用户点击任何星号,则费率有效。所以这就是我到目前为止所做的:

<h:form>
                <p:panelGrid>
                    <p:row>
                        <p:column>
                            <p:rating value="#{searchBean.dateWeight}">
                                <p:ajax event="rate" listener="#{searchBean.addDatetoWeights}"
                                    update="dates" render="dates" />
                                <p:ajax event="cancel"
                                    listener="#{searchBean.removeDatefromWeights}"
                                    update="dates" />
                            </p:rating>
                            <h:panelGroup id="dates" rendered="#{searchBean.dateRated}">
                            <h:outputText  value="test"></h:outputText>
                            </h:panelGroup>
                        </p:column>
                    </p:row>
                </p:panelGrid>
</h:form>

bean的片段:

boolean dateRated;
int dateWeight;

public void addDatetoWeights(){
        dateRated=true;
        weights.put("date",dateWeight);
        System.out.println(dateRated);
    }

public void removeDatefromWeights(){
        dateRated=false;
        if(weights.containsKey("date"))
            weights.remove("date");
    }

1 个答案:

答案 0 :(得分:2)

让我们回到基础:HTML和JavaScript。在深入了解JSF之前了解它们也很重要。 JSF在这个问题的上下文中只是一个HTML / JS代码生成器。

使用<p:ajax update="dates">,您基本上会告诉JavaScript按给定ID获取HTML元素,然后将其内容替换为从ajax响应中的服务器检索到的新内容。但是,由于<h:panelGroup id="dates">始终没有呈现给HTML输出,因此JavaScript无法通过document.getElementById()找到元素以替换其内容,然后忽略该指令。 / p>

相反,<p:ajax update="dates">必须引用始终呈现的组件,以便JavaScript可以实际找到它。只能有条件地呈现其内容。

这是重写:

<h:panelGroup id="dates">
    <h:outputText value="test" rendered="#{searchBean.dateRated}" />
</h:panelGroup>

另见: