我有一个Web应用程序,它基本上在命令commandButton时处理用户的条目,然后接收事务的响应/结果消息,并且应该显示在另一个JSF页面中。
以下是我想要做的示例:我正在使用JSF2和primefaces
registration.xhtml - 交易的起点
RegistrationBean - registration.xhtml使用的支持bean - 具有“create”(也处理输入的数据并假设设置ResultBean)方法,通过register.xhtml上的commanButton调用然后返回字符串进行导航(到result.xhtml)
result.xhtml - 交易的结果用户界面
ResultBean - 保存result.xhtml
所需的值我一直在互联网上搜索样本,似乎找不到一个。有没有办法实现这个目标?如果没有,也许是一种解决方法?我是初学者使用它。任何帮助将不胜感激。提前致谢! 请参阅下面的示例代码。
registration.xhtml:
<h:form style="position: absolute" id="basicPartyRegistration">
<h:panelGroup>
<h:commandButton id="createButton1" action="#{partyRegistration.create}" value="Create">
</h:commandButton>
<h:button outcome="welcome" value="Main Page" id="mainPageButton" />
</h:panelGroup>
<br />
<h:panelGroup>
<p:panelGrid columns="2">
<h:outputText value="Receiver:" />
<h:inputText id="receiver"
value="#{partyRegistration.partyRegistrationInfo.receiverGLN}"
size="15" maxlength="13" />
<h:outputText value="TransmittingData:" />
<h:inputText id="transmittingDataPool"
value="#{partyRegistration.partyRegistrationInfo.transmittingDataPool}"
size="15" maxlength="13" />
<h:outputText value="PartyData:" />
<h:inputText id="partyData"
value="#{partyRegistration.partyRegistrationInfo.partyDataPool}"
size="15" maxlength="13" />
</p:panelGrid>
.....
.....
RegistrationBean:
@ManagedBean (name = "partyRegistration")
@viewScoped //Changed to @ConversationScoped
public class RegistrationBean implements Serializable{
private String receiver
private String transmittingData;
private String partyDataPool;
@ManagedProperty (value = "resultBean")
private Result result;
// more variables
//public getters and setters
public String create(){
// do some processing
// some magic way to set RESULT bean to be used in the next page
return "result";
}
}
result.xhtml
<h:form style="position: absolute" id="partyRegistrationResponse">
<h:panelGroup>
<h:button outcome="welcome" value="Main Page" id="mainPageButton" />
</h:panelGroup>
<br/>
<h:panelGroup>
<p:panelGrid columns="4">
<h:outputText value="Last Date Changed: " />
<p:inputText id="lastDateChg" value="#{partyResponse.lastChangedDateItem}"
title="Last Date Changed" size="15" >
</p:inputText>
</p:panelGrid>
<h4>Response Identification</h4>
.....
.....
ResultBean:
@ManagedBean (name = "partyResponse")
@ViewScoped //changed to @ConversationScoped
public Class ResultBean implements Serializable{
private Date lastChangedDateItem;
//more variables
//getters and setters
}
面-config.xml中
<navigation-rule>
<navigation-case>
<from-outcome>result</from-outcome>
<to-view-id>/result.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
答案 0 :(得分:1)
尝试在RegistrationBean的create()方法中创建ResultBean,并以编程方式将其放在合格范围内。 ViewScope可能不是正确的选择,因为您将离开注册视图。
要重定向,请将其放入闪存范围。
FacesContext.getCurrentInstance().getExternalContext().getFlash().putNow("partyResponse", resultBean);
您还应该查看会话范围,这对于存储属于一个用例的一系列页面的bean非常有用。
答案 1 :(得分:0)
如果只需要简单字符串,为什么不使用FacesMessage
?
public String create(){
FacesContext.getCurrentInstance()
.addMessage(null, new FacesMessage("Add your message here"));
return "result";
}
并在result.xhtml
中使用<h:messages>
标记:
<h4>Response Identification</h4>
<h:messages/>
否则,如果您需要的不仅仅是结果消息,那么您应该考虑您的设计并将ResultBean放在更广泛的范围内(会话或会话)。
例如,使用包含当前结果的会话范围bean:
@ManagedBean
@SessionScoped
public Class SessionBean
private Result currentResult;
// getter and setter
}
并在您的注册bean中:
// inject the session scoped bean
@ManagedProperty(value="#{sessionBean}")
private SessionBean sessionBean;
public String create(){
sessionBean.setCurrentResult(myResult);
return "result";
}