我开始使用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");
}
答案 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>