【问题标题】:change h:inputText attribute with javascript jsf2使用 javascript jsf2 更改 h:inputText 属性
【发布时间】:2013-04-26 14:25:21
【问题描述】:

我有这个输入:

    <p:column headerText="Quantité">
        <h:inputText styleClass="maqte" id="qte"
            onkeyup="validerInput($(this),$(this).parent().prev().find('.monpu'));"
            value="#{car.qte}" converter="lenientDoubleConverter" >

        </h:inputText>
    </p:column>

如上代码所示 (converter="lenientDoubleConverter") I use this converter (to disable the implicit conversion of jsf2)

但是当用户点击一个按钮后我想启用它,那么我应该在请求发送到服务器之前使用 javascript 删除这个转换器

有没有办法用javascript删除这个属性

提前谢谢你

【问题讨论】:

    标签: javascript jsf-2 input converter


    【解决方案1】:

    有什么办法可以用javascript去掉这个属性

    没有。右键单击页面并在您喜欢的浏览器中执行查看源代码。您将看到 JSF 代码生成一个和所有 HTML 代码。 JSF 组件的converter 属性在&lt;h:inputText&gt; 生成的HTML 输出中没有表示。更重要的是,转换器根本不在客户端运行。它只是一个服务器端声明,转换器在服务器端运行。

    最好的办法是让按钮添加一个特定的请求参数,指示转换器不宽容。例如

    <p:commandButton ...>
        <f:param name="disableLenientDoubleConverter" value="true" />
    </p:commandButton>
    

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        try {
            return super.getAsObject(context, component, value);
        } catch (ConverterException e) {
            if ("true".equals(context.getExternalContext().getRequestParameterMap().get("disableLenientDoubleConverter"))) {
                throw e;
            } else {
                return null;
            }
        }
    }
    

    【讨论】:

    • 谢谢BalusC,我用这个测试过:&lt;p:commandButton value="valider" process="@this lesarticles" actionListener="#{commandeMB.listener}" &gt; &lt;f:param name="disableLenientDoubleConverter" value="true" /&gt; &lt;/p:commandButton&gt; 只有在转换完成时才会启动 actionListener 方法
    • 但我有一个问题:p:message 与 inputText(在数据表内)一起放置时没有显示错误:&lt;p:column headerText="Quantité"&gt; &lt;h:inputText styleClass="maqte" id="qte" onkeyup="validerInput($(this),$(this).parent().prev().find('.monpu'));" value="#{car.qte}" converter="lenientDoubleConverter" required="true" converterMessage="double" &gt; &lt;/h:inputText&gt; &lt;p:message for="qte" /&gt; &lt;/p:column&gt; 我不知道为什么
    • 您忘记对消息进行 ajax 更新。然而,这是一个不同的问题。如果仍然卡住,请按
    【解决方案2】:
    $(element).removeAttr("converter");
    

    【讨论】:

    • 这是 jQuery,不是 JavaScript:)
    • jQuery 实际上是 JavaScript ;)。但我明白你的意思。
    【解决方案3】:

    只需将此属性设置为空值。

    document.getElementsById("qte").setAttribute("converter","");
    

    【讨论】:

      猜你喜欢
      • 2012-06-25
      • 2012-03-15
      • 2012-07-07
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多