Jsf 清除支持bean中的输入验证错误

Jsf 清除支持bean中的输入验证错误,jsf,primefaces,Jsf,Primefaces,我有一个带有单元格编辑器的数据表。我只想让一些(选定的)行可编辑。当用户使用单元格编辑器时,我希望在设置值后立即执行输入验证 因此,我在数据表中使用cellEdit事件,并从事件处理程序触发验证失败 <p:ajax event="cellEdit" listener="#{bean.onEditCell}" update=":formId:propertySelect" /> 这很有魅力。如果用户输入无效值,则编辑器不会关闭,并显示错误消息 不起作用的是用户随后输入一个有效值。

我有一个带有单元格编辑器的数据表。我只想让一些(选定的)行可编辑。当用户使用单元格编辑器时,我希望在设置值后立即执行输入验证

因此,我在数据表中使用cellEdit事件,并从事件处理程序触发验证失败

<p:ajax event="cellEdit" listener="#{bean.onEditCell}" update=":formId:propertySelect" />

这很有魅力。如果用户输入无效值,则编辑器不会关闭,并显示错误消息

不起作用的是用户随后输入一个有效值。cellEdit事件不会再次触发,因为表单处于“输入验证失败状态”

我花了一天时间试图解决这个问题:

  • 我想在用户设置新值时重置输入验证-resetInput仅从按钮起作用。我无法让它在价值变化上工作
  • 我没有找到如何直接从JavaScript重置字段
  • 如果我将“onchange”事件和“remoteCommand”组合在一起,则在支持bean中调用一个处理程序,但是我找不到UIInput来调用它的resetValue()

    
    


我正在寻找一种方法来清除ID为“pvSimple”、“pvArea”或“pvEnum”的输入字段上的输入验证错误。

我没有尝试过,但是
有一个
resetValues
属性,理论上应该可以工作(与您打算使用
的方法相同)。另见a.o.@BalusC:谢谢,我知道这一点,但我没有找到一种方法将所有这些结合到一个有效的解决方案中。所需的功能是:如果输入组件上存在输入验证失败,并且用户输入了一个新值,则该字段应清除验证失败并验证新值。实际上,我刚刚发现它可以工作,但有一个例外:我在SelectOne菜单上测试,在验证错误发生之前,更改值也会触发编辑完成操作。出现验证错误后,用户甚至必须在下拉菜单上特别按Enter键。
<p:dataTable id="propertySelect" value="#{bean.propertyValues}" var="prop" 
    editable="true" editMode="cell" scrollable="true" 
    scrollHeight="200" widgetVar="propSelectTable" 
    filteredValue="#{bean.filteredPVs}">
<p:ajax event="cellEdit" listener="#{bean.onEditCell}" update=":#{formId}:propertySelect" />
<p:ajax event="filter" oncomplete="updateToggle()" />

<p:column id="rowSelection">
    <f:facet name="header">
        <p:selectBooleanCheckbox id="toggleAll" value="#{bean.selectAllRows}">
            <p:ajax listener="#{bean.handleToggleAll}" update=":#{formId}:propertySelect" />
        </p:selectBooleanCheckbox>
    </f:facet>
    <p:selectBooleanCheckbox value="#{prop.selected}">
        <p:ajax update=":#{formId}:propertySelect" oncomplete="updateToggle()" listener="#{bean.rowSelectListener(prop)}"/>
    </p:selectBooleanCheckbox>
</p:column>
<p:column headerText="Property">
    <h:outputText value="#{prop.name}" />
</p:column>
<p:column headerText="Description">
    <h:outputText value="#{prop.description}" />
</p:column>
<p:column headerText="Value">
    <p:cellEditor rendered="#{prop.selected}">
        <f:facet name="output">
            <h:outputText value="#{bean.displayPV(prop)}" />
        </f:facet>
        <f:facet name="input">
            <p:inputText id="pvSimple" value="#{prop.uiValue}" rendered="#{prop.propertyValueUIElement eq 'INPUT'}" />
            <p:inputTextarea id="pvArea" rows="7" value="#{prop.uiValue}" 
                rendered="#{prop.propertyValueUIElement eq 'TEXT_AREA'}" />
            <p:selectOneMenu id="pvEnum" value="#{prop.uiValue}" 
                    rendered="#{prop.propertyValueUIElement eq 'SELECT_ONE_MENU'}">
                <f:selectItem itemLabel="&lt;Select value&gt;" itemValue="" />        
                <f:selectItems value="#{prop.enumOptions}" var="enum" itemLabel="#{enum}" itemValue="#{enum}" />        
            </p:selectOneMenu>
        </f:facet>
    </p:cellEditor>
    <h:outputText value="-" rendered="#{!prop.selected}" />
</p:column>