有条件地将“styleClass”应用于组件,而不会重新渲染
问题描述:
我试图更新JSF组件的styleClass,如果设置值符合某个条件。我可以通过对由某个Ajax事件触发的整个组件进行再处理来实现它。然而,所提供的事件仅在不合时宜的时间触发,即,当用户仍然与该组件交互时,由于重绘而导致中断。有条件地将“styleClass”应用于组件,而不会重新渲染
是否更新styleClass而不重绘的方法?
工作的代码段,但与不希望的行为:
<p:selectCheckboxMenu id="input" value="#{bean.value}">
<f:selectItems value="#{bean.options}" />
<f:attribute name="styleClass" value="#{bean.highlight(bean.value)}" />
<p:ajax event="toggleSelect" update="input" />
<p:ajax event="change" update="input" />
</p:selectCheckboxMenu>
而且支持bean:
@ManagedBean
@ViewScoped
public class Bean {
private List<String> value;
private Map<String, String> options;
public String highlight(Object value) {
return value == null || value instanceof Collection<?> && ((Collection<?>) value).isEmpty() ? "" : "ui-state-active";
}
/* getters & setters */
}
答
的是一种方式,以更新的styleClass没有重绘?
- 使用update @none
- 呼叫在AJAX事件
- 在服务器端方法的服务器端方法添加Primefaces ajax callback with parameter to javascript你的情况例如返回'class'
- 向ajax标记添加oncomplete,并在未完成时使用回调参数执行某些操作:Primefaces ajax callback with parameter to javascript,例如,找到正确的组件设置类(用jquery)