当前位置: 首页 > 知识库问答 >
问题:

bean中未更新的值

姬慎之
2023-03-14
<h:form>
    <h:messages />
        <h:selectOneRadio value="#{bean.selectedValue}" id="selectId"
            layout="pageDirection">
            <f:selectItems value="#{bean.values}" var="value"
                itemLabel="#{value.text}" itemValue="{value}" />
        </h:selectOneRadio>
        <h:commandButton value="Press Me" >
            <f:ajax listener="#{bean.btn_action}" execute="@form"/>
        </h:commandButton>
</h:form>

下面是代码详细信息。

  • Bean是@ViewScope中的支持Bean
  • 豆子。值是@RequestScope中另一个托管bean的列表
  • 单选按钮值绑定到支持bean中的上述@RequestScope托管bean#{bean.selectedValue}
  • selectedValue是对支持bean中具有getter/setter的对象的引用

问题-当将execute=@form添加到ajax标记时,甚至不会调用侦听器之后execute-@form,侦听器被调用,但单选按钮的选定值在支持bean中未更新。-当我调试时,getter总是为selectedValue调用,而不是setter。

任何帮助都将不胜感激。谢谢

共有1个答案

呼延德华
2023-03-14

假设itemValue="{value}"只是一个粗心的错字,并且您从未注意过服务器日志,那么如果#{value}表示非标准类型并且您没有该类型的Converter或没有正确实现该类型的equals()方法,则此构造将默默失败。

第一步是将渲染=“@form”添加

<f:ajax execute="@form" listener="#{bean.btn_action}" render="@form" />

第二步是根据显示的转换/验证错误修复问题。很可能您有一个转换错误“null converter”,或者您已经有了一个,但您得到的是一个验证错误“value is not valid”。

这两个潜在问题都在以下答案中得到详细回答:

  • 如何填充h的选项:从数据库中选择一个菜单

 类似资料:
  • 我有2页在这里,在第一页我接受输入,然后通过验证输入数据使用java类用户显示在秒页。 输入表格 展示形式 JAVA用户类 当我提交表单参数消息值从未更新时,它总是向我显示消息“name cannot be null”不确定我在这里做错了什么,请帮我弄清楚。

  • 问题内容: 我想在控制器中使用带注释的原型bean。但是春天正在创建一个单例豆。这是该代码: 控制器代码: 速度模板: Spring config.xml已启用组件扫描: 每次我都会增加计数。无法弄清楚我要去哪里错了! 更新资料 正如@gkamal所建议的那样,我使可以解决问题。 更新的代码: 问题答案: 范围原型意味着每次你向spring(getBean或依赖项注入)请求实例时,它将创建一个新实

  • 我在同一个包中有两个java文件。我想将一个变量的更新值从一个文件传递到另一个文件。我编写了以下代码。在1班。java:- class2.java:- 问题是最终值打印是的,不应该打印。输出应该很好。请帮我。

  • 其行如下: 这意味着,如果用户在date picker控件的文本输入过程中按enter键,那么在用户将数据放入其他控件之前,就会触发事件,我并不特别希望这样。 所以问题是,如果用户在框中输入文本,然后不按Enter就离开框,为什么不改变呢?我找不到在用户离开datepicker框时调用的事件或datepicker的属性来获取控件的文本值并将其与的值进行比较。我是不是漏掉了什么? 这可能是JavaF

  • 所以我的应用程序有一个主窗口显示食谱列表,第二个窗口(从主窗口打开)添加新的食谱到列表(有信息)。两个窗口具有相同的视图模型。经过测试,新的制作方法被成功添加到列表中,但是UI没有更新新的制作方法。我也有一个删除按钮在主窗口为每个食谱和它的工作正常。删除的制作方法将在视图模型和UI中删除。我的代码相当长。我希望它是可读的。下面是我的代码(还有很多其他的UI,所以我只显示相关的代码): 主窗口视图

  • 应用程序应该做的是从editReminder中获取一个字符串,并使用intent将其发送到AlarmManager。这是第一次成功。但是,当你关闭应用程序并重试时,通知不会使用你刚刚在编辑文本中键入的字符串,而是使用你第一次运行应用程序时键入的文本。 我们如何使新插入的文本显示在通知中,而不是旧文本? MainActive:在按钮单击上执行的方法 DisplayNotification:在触发通知