我想根据输入值是true还是false来动态更改div的类。认为调用输入的函数被调用,类永远不会改变。这是xhmtl:
<td>
<div class="#{regBean.nameclass}">
<h:inputText class="form-control input-sm" value="#{regBean.name}">
<f:ajax event="blur" listener="#{regBean.validateName}" render="namemsg" />
</h:inputText>
</div>
</td>
<td class="error">
<h:outputText class="error-msg" id="namemsg" value="#{regBean.nameMsg}"></h:outputText>
</td>
这是来自相关bean的函数:
private static final String SUCCESS="form-group has-success";
private static final String ERROR="form-group has-error";
public void validateName(){
if(ValidatorUtilities.empty(name)){
nameMsg="Παρακαλώ εισάγετε όνομα!";
}
nameMsg=ValidatorUtilities.validateName(name);
if(nameMsg.equals("")){
nameclass=SUCCESS;
validations.put("name",true);
}
else{
nameclass=ERROR;
validations.put("name",false);
}
}
认为在id="namemsg"
元素处的消息正确显示该类保持不变。有没有错,或者我是否会采用错误的实现方式,并且应该通过jquery做这个客户端?
注意:我已经为字符串nameclass
设置了getter-setter答案 0 :(得分:0)
您的代码未重新呈现<div>
。您的代码仅重新呈现<h:outputText>
。我不确定为什么以及如何预期<div>
也会被重新渲染所覆盖。您所需要做的就是在render
属性中指定其客户端ID。您只需要将<div>
替换为<h:panelGroup layout="block">
,因为渲染只能定位真正的JSF组件。
<td>
<h:panelGroup id="field" layout="block" styleClass="#{regBean.nameclass}">
<h:inputText ...>
<f:ajax ... render="field namemsg" />
</h:inputText>
</h:panelGroup>
</td>
<td class="error">
<h:outputText id="namemsg" ... />
</td>
无关,您的整个验证方法完全被打破。您应该使用真实Validator
和<h:message>
,与每个decent JSF book中显示的完全相同。这也是一个强烈的暗示,你仍然没有。我热烈建议先做这件事。