当加载JSF页面时,我正在从包含区域列表的数据库中填充<p:selectOneMenu>
。
当选择此菜单中的区域时,会显示一组<p:inputText>
,其中用户可以插入与产品重量相对应的费用,该费用将由运输商转移到菜单中的选定区域。这可以在以下snap shot中显示。
可以看出,当用户输入非数字值时,如果按下给定的保存按钮<p:commandButton>
,则会发生验证违规(每个文本字段顶部显示的数字对应于重量)。 / p>
如果用户现在更改菜单中的区域 - 第一个面板没有按下重置按钮,则数据对应于新选择的区域仅在重置按钮为时才会加载到这些文本字段中按下follows(因为违反了验证)..
那么,如果在菜单中更改项目(区域),如何在上次验证违规后加载数据?
<p:selectOneMenu>
的更改事件,在这种情况下,应执行<p:resetInput>
完成的功能。
希望你能理解我的意思:)。
答案 0 :(得分: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>
然后这个改变应该做:
<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>
不要忘记从侦听器方法中删除AjaxBehaviorEvent
参数。无论如何,它在这个特殊情况下毫无用处。