【问题标题】:jsf changing class of an elementjsf改变元素的类
【发布时间】:2014-08-19 11:02:29
【问题描述】:

我想根据输入值是真还是假来动态更改 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

【问题讨论】:

    标签: jsf-2


    【解决方案1】:

    您的代码没有重新渲染&lt;div&gt;。您的代码只是重新渲染&lt;h:outputText&gt;。我不确定您为什么以及如何期望&lt;div&gt; 也被重新渲染覆盖。您只需在render 属性中指定其客户端ID。您只需将&lt;div&gt; 替换为&lt;h:panelGroup layout="block"&gt;,因为渲染只能针对真正的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&lt;h:message&gt;,就像每个decent JSF book 中显示的一样。这也是一个强烈的暗示,表明您仍然没有。我强烈建议您先解决这个问题。

    另见:

    【讨论】:

    • 感谢您的建议!如果我按照您发送的链接中建议的方式进行验证,我必须通过将 bean 导入每个验证器文件来更新 bean 的值。这是一种好的技术还是我应该找到另一种方法?
    • 您为什么要这样做?只需使用提供的 value 参数即可。如果验证成功,JSF 将自动更新模型。这一切也都在一本不错的 JSF 书中进行了解释。
    • 因此没有一本书是免费的,您能否提供一个非常简短的示例,说明当来自不同文件的验证器时如何更新 bean 的值?
    • 您要验证的值已作为validate() 方法的第三个参数提供。您需要做的就是抛出ValidatorException 这个值无效。另见“另见”链接。您可以在stackoverflow.com/tags/jsf/info 中找到在线教程的链接,但没有什么比阅读一本好书更重要了。
    • 我已经仔细阅读了您发送的内容,但我仍然无法弄清楚如何阅读。假设我有一个 int foo=5; 的 bucking bean;无论验证成功还是失败,我都想修改它的值(例如 foo=10;成功时 foo=5;失败时)。除非我导入 bean,否则验证器不会“知道” int foo。那么我该如何处理呢?
    猜你喜欢
    • 1970-01-01
    • 2010-11-09
    • 2013-11-10
    • 2013-01-12
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    相关资源
    最近更新 更多