我有两页,比如第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。
有人可以建议我如何解决这个问题吗?