validation - 当必填输入字段变空时,不会触发 PrimeFaces ajax 更新

标签 validation jsf input primefaces xhtml

我正在将 JSF 与 PrimeFaces 一起使用,其字段如下所示。

    <p:outputLabel for="vehicle" value="#{msg['vehicle.text']}" />
    <p:autoComplete id="vehicle" value="#{newCtrlr.vehicleId.vehicle}" autocomplete="true" scrollHeight = "200" required = "true" 
    completeMethod="#{newCtrlr.vehicle_AutoComplete}"  minQueryLength = "2">
    <p:ajax event="itemSelect" listener = "#{newCtrlr.onVehicleChange}" update = "market" />
    <p:ajax event="change" listener = "#{newCtrlr.onVehicleChange}" update = "market" />                                        
    </p:autoComplete>

    <p:outputLabel for="market" value="#{msg['market.text']}" />
    <p:inputText id="market" value="#{newCtrlr.market.marketName}"  
    readonly = "#{empty newCtrlr.vehicleId.vehicle ? 'true' :'false' }" />

在上述代码中,如果输入了车辆值(value),则市场应可编辑。如果车辆值(value)被清算,市场应变为只读。现在,由于“需要”车辆输入,因此不会触发 ajax 更新,因此市场仍然处于启用状态。如果我删除车辆上的“必需”,则一切正常。我想知道是否有一种方法可以使 inputText 成为必填项,并在必填字段中的值更改为空/空时触发 ajax 更新。

最佳答案

首先,此行为是默认的 JSF 行为:如果输入无效,则不会写入模型。 因此,您必须手动更改此行为,例如使用事件监听器。

将以下方法添加到您的 Backing-Bean:

public void setModelValueToNullIfValidationFailed(ComponentSystemEvent event) throws AbortProcessingException {
    UIInput input = (UIInput) event.getComponent();
    if (input.isValid()) {
            return;
    }
    input.getValueExpression("value").setValue(FacesContext.getCurrentInstance().getELContext(), null);
}

此方法检查组件的验证是否失败。如果是这样,模型值将设置为 null。

将 f:event 添加到您的 p:autoComplete:

<p:autoComplete ...>
    ...
    <f:event type="postValidate" listener="#{newCtrlr.setModelValueToNullIfValidationFailed}" />
</p:autoComplete>

关于validation - 当必填输入字段变空时,不会触发 PrimeFaces ajax 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52998519/

相关文章:

java - 使用 Spring 记录异常

jquery - 禁用输入框中的某些 html 输出

android - 在 ActionBar 中将数字输入类型设置为 SearchView

python - 如何在 Python 中验证字典的结构(或模式)?

c# - 如何将自定义验证规则应用于 MVC3 中的 ViewModel 属性

java - JSF 国际化 f :loadbundle or through faces-config: Performance point

css - 将消息和提交按钮对齐到其他输入字段的右侧

java - Spring Validation - 以编程方式绑定(bind)到 validator

c# - 如何基于 DropDownList 选择验证具有 RegularExpression 的 TextBox?

java - Google Analytics Tracker Code (GATC) [a Javascript] 需要修改以使其能够在 JSF 中运行