2010-09-03 72 views
0

我無法弄清楚我在做什麼錯誤。請求你的輸入。請。在渲染響應階段未渲染託管Bean屬性值

我有一個請求作用域管理bean,它有一個List,我在我的JSF 1.2 Apache我的faces應用程序中作爲一個數據表進行渲染。當我提交表單時,由於有一些服務器端驗證失敗,我添加一個FacesMessage並顯示相同的JSF頁面。

在這個請求響應循環中,在INVOKE-APPLICATION階段,我能夠看到List的值,但是當頁面用FacesMessage呈現時,數據表是空的。

其他bean屬性及其值保留在此請求響應循環中,但此List/Datatable除外。

這是數據表是如何在動作方法構建 - 初始請求

if(getInputXMLString() != null 
      && getInputXMLString().length() >0) 
    { 
    List<NodeDetailsVO> nodes = Utility.inputXMLStringNodeDetailsVO(getInputXMLString()); 
     setSelectedNodes(nodes); 
    } 

當我嘗試與上述相同的在回發請求(另一個動作方法內),它的工作原理okay.When我在私有方法中添加我的業務邏輯,並且如果我將它稱爲此代碼之上或此後,它不起作用。我只在私有方法中使用List的getter。在getter方法中 - 我只在if和else內部有sysouts。

這是數據表是如何在XHTML頁面渲染:

<h:dataTable width="80%" cellspacing="0" border="1" 
      id="nodes_datatable" cellpadding="2" 
      style="border-collapse:collapse;" 
      value="#{createBean.selectedNodes}" 
      binding="#{createBean.selectedNodesHTMLDataTable}" 
      var="aResult" 
      columnClasses="columnAlignRight,columnAlignLeft" 
      > 

回答

1

這是不正常的情況。我看到的只有兩個可能的原因:

  1. 數據模型(該List你叫它)是被莫名其妙地復位。 getter方法可能不僅僅是返回數據模型,而是重新加載數據模型,但是缺少一些基於請求的參數/條件。

  2. 該數據表或其父組件之一具有rendered屬性,該屬性評估爲false

+0

感謝BalusC。 2是不正確的。我只是在getter的列表(DataModel)中打印對象的大小和值。你能解釋更多關於基於請求的參數/條件嗎?有沒有其他方法可以在請求範圍的Bean中的請求之間保留數據表值? – gekrish 2010-09-03 12:08:25

+0

這個問題讓我覺得這個列表根本就沒有保存。你能詳細說明一下你的意思嗎?「在INVOKE-APPLICATION階段,我可以在你原來的問題中看到List的值?你是如何確定的? – BalusC 2010-09-03 12:18:36

+0

在被調用的action方法中,我使用它的getter打印了List的值,並且我使用了PhaseListener,所以我知道在哪個階段會發生什麼。改寫 - 如何在請求範圍的bean中的請求之間保留數據表值? – gekrish 2010-09-03 12:24:44