【问题标题】:p:inputText with p:ajax calls f:viewParam Converterp:inputText 与 p:ajax 调用 f:viewParam 转换器
【发布时间】:2018-11-25 07:22:04
【问题描述】:

我们确实有一个小页面,它使用 viewParam 将给定的 Id 转换为具体的对象。此转换器在离开(模糊)输入文本字段时调用,该字段已验证。为什么?我可以重做这个,以便每次都不会调用转换器吗?

这很烦人,因为转换器为 BackingBean 中的相应对象调用 set-method,如果页面第一次被调用以创建此对象,则此 bean 为 null。

<f:metadata>
    <f:viewParam name="id" value="#{bean.object}"
                 converter="#{objectConverter}"
                 converterMessage="#{msgs['converter.msg.object']}"/>
    <f:viewAction action="#{bean.init}"/>
</f:metadata>

<p:inputText id="text" value="#{cc.attrs.value}"
             styleClass="inputTextValidated"
             required="#{cc.attrs.required}"
             requiredMessage="#{cc.attrs.requiredmessage}"
             label="text" validatorMessage="#{cc.attrs.msg}" title="#cc.attrs.title}"
             readonly="#{cc.attrs.readOnly}">
            <cc:insertChildren/>
            <p:ajax update="msg_text" event="blur"/>
</p:inputText>
<p>
  <p:message id="msg_text" for="text" display="msg"/>
</p>

如果我们不使用转换器而仅使用 viewAction 将 Id 转换为相应的对象(或创建一个新对象,如果适用),一切都很好。这是解决此问题的唯一/正确解决方案吗?

我们确实在 CDI 中使用 primefaces 6.1。转换器是实现转换器接口的@Named 和@ApplicationScoped bean。

在输入文本字段周围使用 p:fragment 也没有帮助。

【问题讨论】:

    标签: jsf primefaces jsf-2.2


    【解决方案1】:

    这就是 JSF 工作方式的本质。如果您不想这样做,我建议您查看 OminFaces ViewParam:http://showcase.omnifaces.org/components/viewParam

    来自他们的文档:

    无状态模式,避免不必要的转换、验证和模型 更新回发标准 UIViewParameter 实现 回发后再次调用模型设置器。这并不总是 绑定到视图范围的 bean 时需要,并且可能导致 与昂贵的转换器结合使用时会出现性能问题。到 解决这个问题,该组件默认将提交的值存储为 组件属性而不是在模型中(因此在视图状态 如果绑定是视图范围的 bean)。

    标准的 UIViewParameter 实现调用转换器和 验证器再次回发。当您 有例如一个 required="true",但参数不保留在表单上 提交。您需要在每个命令中保留它 链接/按钮。为了解决这个问题,这个组件不调用 在回发时再次使用转换器和验证器。

    【讨论】:

    • 没问题。为清晰起见进行了编辑。
    • 赞了 ;-) 并删除了评论(明天也是这个 pne)
    猜你喜欢
    • 2015-01-19
    • 2012-05-22
    • 2012-07-22
    • 1970-01-01
    • 2012-07-01
    • 2012-07-31
    • 2016-08-06
    • 2013-05-20
    • 1970-01-01
    相关资源
    最近更新 更多