在我的jsf 2.0代码中,当您填写表格时,它会考虑您在一种表格中声明的所有“错误”值,并在按下命令按钮时将其添加到字符串缓冲区中,然后将其转换为字符串。现在我想要的是该字符串作为值进入下一个bean,以便在下一个jsf页面上输入的文本区域将具有已添加到该区域的信息。但是可悲的是,我在如何实现这一目标方面一直处于空白状态,这是到目前为止我已写下的内容。我从页面或bean中都没有收到任何错误,只是什么也没有显示出任何帮助,我们将不胜感激,并且非常喜欢。
public String fillForm(){
boolean failTest = false;
String errorCodeForNcpForm = "";
StringBuffer buffer = new StringBuffer();
buffer.append (" ");
if (!unitSerialValue.equalsIgnoreCase("P"))
{
buffer.append (1 + unitSerialValue );
failTest = true;
buffer.append(" ");
}
if(!screenProValue.equalsIgnoreCase("P"))
{
buffer.append (2 + unitSerialValue );
failTest = true;
buffer.append(" ");
}
if(failTest)
{
//gets the whole error code
errorCodeForNcpForm = buffer.toString();
NcpFormBean ncpForm = new NcpFormBean();
//Sets the error code to the value
ncpForm.setproblemQcValue(errorCodeForNcpForm);
return "ncpFormQc";
}
else
return "index";
}
这是xhtml部分,其中包含该值的代码。
<b>Problem Description: </b>
<h:inputTextarea value="#{ncpFormBean.problemQcValue}" id="problemDec" required="true" cols="30" rows="10">
<f:validateLength minimum="1" maximum="30" />
</h:inputTextarea> <br/>
<h:message for="problemDec" style="color:red" />
第二个bean“ ncpFormBean”当前除了标准的getter和setter之外什么都没有,而且两个bean都是会话范围的。
最佳答案
在您的第一个bean中,声明第二个bean,例如:
// change the value as the name of your real managedbean name
@ManagedProperty(value="#{ncpFormBean}")
private NcpFormBean ncpForm;
与它的二传手:
public void setNcpForm(NcpFormBean ncpForm) {
this.ncpForm = ncpForm;
}
现在在您的fillForm方法中:
public String fillForm(){
boolean failTest = false;
String errorCodeForNcpForm = "";
StringBuffer buffer = new StringBuffer();
buffer.append (" ");
if (!unitSerialValue.equalsIgnoreCase("P")){
buffer.append (1 + unitSerialValue );
failTest = true;
buffer.append(" ");
}
if(!screenProValue.equalsIgnoreCase("P")){
buffer.append (2 + unitSerialValue );
failTest = true;
buffer.append(" ");
}
if(failTest){
//gets the whole error code
errorCodeForNcpForm = buffer.toString();
this.ncpForm.setproblemQcValue(errorCodeForNcpForm);
return "ncpFormQc";
} else
return "index";
}
现在,可以在第二个视图的第二个Bean中访问传递的数据(因为您的Bean是会话作用域的)。
更新:
假设您有2个bean:Bean1和Bean2(均为sessionScoped):
如果您想更改值
@ManagedBean(name="bean1")
@SessionScoped
public class Bean1 {
@ManagedProperty(value="#{bean2}")
private Bean2 ncpForm;
....
}
..
@ManagedBean(name="bean2")
@SessionScoped
public class Bean2 {
....
....
}
注意:@ManagedProperty(value =“#{bean2}”)此值/名称必须与此处的名称完全相同@ManagedBean(name =“ bean2”)
现在的xhtml:
bean1.xhtml
....
<h:commandButton action="#{bean1.fillForm}"/>
....