2014-02-13 115 views
0

在我的jsf 2.0代碼中,當你完成一個表單時,它會考慮到你在一個表單中聲明的​​所有「錯誤」值並將其添加到字符串緩衝區當按下命令按鈕時,我將它轉換爲一個字符串。現在我想要的是這個字符串作爲一個值到下一個bean,這樣在下一個jsf頁面上輸入的文本區域就可以在那裏添加那些信息。但令人遺憾的是,我對如何實現這一目標留下了空白。這是我迄今寫下的內容。我沒有從網頁或豆類獲得任何類型的錯誤,它只是沒有顯示任何幫助,將不勝感激,並非常好的愛。jsf將一個bean的字符串傳遞給另一個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" /> 


第二豆「ncpFormBean」沒有任何關係,但目前標準的getter和setter,無一不豆會話範圍。

在你的第一個bean
+0

什麼是您的第一個和第二個bean的範圍? –

+0

兩者都是會話。發送字符串的第一個bean和接收數據的第二個字符串都是會話。 –

回答

1

宣佈第二豆狀:

// 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是會話範圍的)。

UPDATE:

可以說你有2種豆:Bean1和Bean2(均爲sessionScoped):

,如果你想改變值

@ManagedBean(name="bean1") 
@SessionScoped 
public class Bean1 { 
    @ManagedProperty(value="#{bean2}") 
    private Bean2 ncpForm; 
    .... 
} 

..

@ManagedBean(name="bean2") 
@SessionScoped 
public class Bean2 { 
    .... 
    .... 
} 

NOT E:@ManagedProperty(值= 「#{bean2}」)這個值/名稱必須是完全相同這裏的名稱@ManagedBean(名稱= 「bean2」)

現在的XHTML:

bean1 .xhtml

.... 
<h:commandButton action="#{bean1.fillForm}"/> 
.... 
+0

當我添加「this.ncpForm.setProblemQcValue」時,我似乎從我的xhtml文件中收到錯誤。這是我得到的錯誤,我將使用xhtml代碼更新我的問題。注意我只會在fillform方法中刪除清除它時添加該行代碼纔會出錯。 javax.el.E​​LException:/qcForm.xhtml在線路389和柱36動作= 「#{qcFormBean.fillForm()}」:顯示java.lang.NullPointerException 引起: java.lang中。NullPointerException - /qcForm.xhtml在第389行和第36列動作=「#{qcFormBean.fillForm()}」:java.lang.NullPointerException –

+0

猜我會問有關該錯誤,但我認爲這似乎是有道理的。 –

+0

@GilbertV;你仍然有這個錯誤?,我會更新我的答案! –

相關問題