如何在违反某些验证后更改<p:selectOneMenu>时重置输入组件

Tin*_*iny 3 jsf primefaces jsf-2.2

<p:selectOneMenu>当加载JSF页面时,我正在从包含区域列表的数据库填充.

当选择该菜单中的区域时,<p:inputText>显示一组用户可以插入与产品重量相对应的费用,该费用将由运输商转移到菜单中的所选区域.这可以在以下快照中显示.

在此输入图像描述

可以看出,当用户输入非数值时,当<p:commandButton>按下给定的保存按钮时,会发生验证违规(每个文本字段顶部显示的数字对应于重量).

如果用户现在改变在菜单的区域-第一面板而不按下复位按钮,数据对应于新选择的区域仅在当复位按钮被按下作为这些文本字段加载如下(因为验证违反). .

在此输入图像描述

那么,如果在菜单中更改了项目(区域),如何在上次验证违规后加载数据?

<p:selectOneMenu>在这种情况下,更改事件应该执行类似的功能<p:resetInput>.

希望你能理解我的意思:).

Bal*_*usC 8

基本上,你需要提供的功能<p:resetInput><p:ajax>的一个<p:selectOneMenu>.这确实是不可能的,因为<p:resetInput>需要放置在实现ActionSource诸如UICommand组件的组件中.

你最好的选择是让<p:remoteCommand>接管<p:ajax>改变听众的工作.在那里你可以放一个<p:resetInput>.

想象一下,你目前有一个:

<h:form>
    <p:selectOneMenu id="zone">
        <f:selectItems ... />
        <p:ajax listener="#{bean.changeZone}" update="data" />
    </p:selectOneMenu>

    <p:panel id="data">
        ...
    </p:panel>
</h:form>
Run Code Online (Sandbox Code Playgroud)

然后这个改变应该做:

<h:form>
    <p:selectOneMenu id="zone" onchange="changeZone()">
        <f:selectItems ... />
    </p:selectOneMenu>
    <p:remoteCommand name="changeZone" process="@this zone" action="#{bean.changeZone}" update="data">
        <p:resetInput target="data" />
    </p:remoteCommand>  

    <p:panel id="data">
        ...
    </p:panel>
</h:form>
Run Code Online (Sandbox Code Playgroud)

不要忘记AjaxBehaviorEvent从侦听器方法中删除参数.无论如何,它在这个特殊情况下毫无用处.