Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 渲染为false不会清除模型_Java_Ajax_Jsf - Fatal编程技术网

Java 渲染为false不会清除模型

Java 渲染为false不会清除模型,java,ajax,jsf,Java,Ajax,Jsf,假设我有五台或更多的输入计算机,它们可以影响是否显示单个下拉菜单。我遇到的问题是,如果下拉菜单显示一次(从而通过ajax设置backingbean中的值),然后用户更改一个影响输入组件,那么当下拉菜单使用呈现属性隐藏时,下拉菜单的backingbean值不会被重置。例如: <h:selectOneMenu id="sampleDropDown" required="false" immediate="true" onchange="jsUpdateSampleDro

假设我有五台或更多的输入计算机,它们可以影响是否显示单个下拉菜单。我遇到的问题是,如果下拉菜单显示一次(从而通过ajax设置backingbean中的值),然后用户更改一个影响输入组件,那么当下拉菜单使用呈现属性隐藏时,下拉菜单的backingbean值不会被重置。例如:

    <h:selectOneMenu id="sampleDropDown" required="false" immediate="true"
        onchange="jsUpdateSampleDropDownValue()" value="#{backingBean.value}" 
        rendered="#{backingBean.shouldShowSampleDropDown}" 
        actionListener="#{backingBean.listener}" />

我知道我在这里有选择。我已经讨论过应该添加一个通用的ValueChangeListener(应用请求值阶段)还是一个EventHandler(呈现响应阶段)这将侦听其他输入的值,并决定是否清除下拉菜单值,但这肯定比仅让渲染属性做出该决定需要更多的工作


我们在我目前参与的项目中看到了几十个类似的问题,我真的很想听听专家们关于处理这种情况的最佳实践。如果有必要,我们将使用自定义ajax(而不是ajax4jsf)和JSF1.1。非常感谢您的帮助。

我提出的解决方案是不要尝试在renderered属性的backingbean值中重置输入组件

我有一个阶段监听器连接到单页接口,基本上是在javascript方法中传递请求参数(即jsUpdateSampleDropDownValue()),以便可以使用责任链模式在呈现的响应阶段加载业务逻辑数据

当在与相应的事件处理程序(即ResetSampleDropDownEventHandler)匹配的更改中传递请求参数(即ResetSampleDropDownEventHandler)时,我会检查一个单独的“constraint”类(请参阅核心Java书籍),该类在清除绑定值或继续请求之前验证是否积累了足够的数据

这使得逻辑可以集中化,但也可以连接到多个组件。您可能会问,为什么没有将一个JSF ValueChangeListener附加到每个组件上,从而允许相同的重用。这是因为我们的业务逻辑发生在更新模型阶段之后的呈现响应阶段,因此它表明任何“重置”类型的方法都发生在任何“默认”值之后