jsf更改元素的类

时间:2014-08-19 11:02:30

标签: jsf-2

我想根据输入值是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

1 个答案:

答案 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中显示的完全相同。这也是一个强烈的暗示,你仍然没有。我热烈建议先做这件事。

另见: