页面加载旧bean数据

时间:2014-09-16 12:41:04

标签: spring jsf javabeans

我有两页,比如第1页和第2页。我在第1页填写了一些值,并在第2页填写了redriect。根据第1页中选择的值,将填充并显示第2页数据。

当加载第2页时,它不会显示bean中的数据或旧数据。但是,只有在手动刷新(F5键)后,第2页才会显示正确的数据。

Page-1 --> Page-2 ==== Displays old bean data
Page-1 --> Page-2 --> F5 key or Refresh ==== Displays new or correct bean data

我在填充bean的控制器方法中有@PostConstruct。截至目前,bean不是managedbean或sessionscoped bean。

Page-1.xhtml

<html>
<head>
</head>
<body>
<h:form id="myForm">
    <p:outputLabel value="#{mybean.myvalue}"></p:outputLabel>
</h:form>
<p:commandButton value="Login" type="submit"
    actionListener="#{page1Controller.myListener}"
    style="float:right;margin-right:30px;" update="myForm">
</p:commandButton>
</body>
</html>

Page-2.xhtml

<html>
<head>
</head>
<body>
    <h:inputhidden value="#{page2Controller.myListener()}"></h:inputhidden>
    <h:form id="myForm">
        <p:outputLabel value="#{mybean.myvalue}"></p:outputLabel>
    </h:form>
    <p:commandButton value="Back" id="back" style="margin-left:30px;"
        action="page-1.xhtml?faces-redirect=true">
    </p:commandButton>
</body>
</html>

Page1Bean.java

@Component
@ViewScoped
public class MyBean {
    private String page1Value = null;

    public void setPage1Value(String page1Value ) {
        this.page1Value = page1Value ;
    }

    public String getPage1Value() {
        return this.page1Value ;
    }
}

Page1Controller.java

public class Page1Controller {

    public void myListener() {
                page1Bean.setPage1Value("new value");
        FacesContext facesContext = FacesContext.getCurrentInstance();
        externalContext = facesContext.getExternalContext();
        externalContext.redirect(externalContext
                        .getRequestContextPath() + "page2.xhtml");
    }
}

Page2Bean.java

@Component
@ViewScoped
public class MyBean {
    private String page2Value = null;

    public void setPage2Value(String page2Value ) {
        this.page2Value = page2Value ;
    }

    public String getPage2Value() {
        return this.page2Value ;
    }
}

Page2Controller.java

@Controller
public class Page2Controller {

    public void myListener() {
        page2Bean.setPage2Value(page1Bean.getPage1Value());
    }
}

在上面的代码中,当页面初始加载时,page2.xhtml中的outputlabel没有使用支持bean值进行更新。但刷新页面后会显示正确的值。

我使用JSF和Spring。

有人可以建议我如何解决这个问题吗?

0 个答案:

没有答案