java - JSF 2.0 : data not updated before the view is rendered

标签 java jsf-2 updates

在我的应用程序中,我有以下 bean:

@Named(value = "mrBean")
@SessionScoped
public class MrBean implements Serializable {

    @EJB
    private MrsBean mrsBean;

    private Item item;

    public void updateItem() {
        this.item = mrsBean.updateItem(item.getId());
    }

}

@Named(value = "itemBean")
@RequestScoped
public class itemBean {
    @Inject
    private MrBean mrBean;

    @PostConstruct
    public void init() {
        if (FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("update") != null) mrBean.updateItem();
    }
}

ViewItem.xhtml 页面上显示项目信息之前,我会检查是否提交了 update 参数以在显示之前更新项目。

当我使用参数 update=true 测试页面时,我不知道为什么呈现旧数据而不是新的更新数据。事实上,我必须在呈现新数据之前刷新页面。

从上面的结果来看,我想是不是@PostConstruct方法是在 View 渲染后调用的。

如果您能给我一个建议,我将不胜感激。

最好的问候,

最佳答案

如果 #{itemBean} 就会发生这种情况在之后 View 中第一次被引用 #{mrBean.item} .例如

#{mrBean.item}
...
#{itemBean}

当 EL 表达式第一次引用它并且它不存在于作用域中时,托管 beans 被第一次构造。在 GET 请求中,其中托管 bean 实例未被标签处理程序属性或 f:event 引用,那么它只会在渲染响应期间构建。

如果重新排列它们使得 #{itemBean}总是在之前被引用(并因此构造)#{mrBean.item}被引用是不可能的,那么最好制作@PostConstruct#{itemBean}一个<f:event type="preRenderView">相反。

<f:event type="preRenderView" listener="#{itemBean.init}" />

关于java - JSF 2.0 : data not updated before the view is rendered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11650620/

相关文章:

java - 获取字符串数组中每个单词的第一个字符及其频率

java - 如何在 eclipse kepler (Sts 3.4) 中添加 JBOSS EAP 7.2 服务器,因为 7.2 没有可用的适配器服务

ajax - 处理 AJAXified 组件的 JSF 2.0 异常的正确方法是什么?

java - 应用程序更新从内部存储中删除旧的共享偏好数据

java - 如何避免重复嵌套 switch 语句

java - 在eclipse中浏览JAR文件

java - 当用户输入错误密码时,登录表单中不显示验证消息

dependency-injection - 分层架构中的 CDI。如何使用 CDI 注释注入(inject)服务对象?

android - 在商店发布新版本的 Android 应用程序时更新 SQLite 数据库

php - 跟踪数据库列值的变化