在我的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}"/>
....

09-05 17:55