2012-03-01 61 views
2

我剛剛使用jsf + richfaces實現了一個粗糙的功能,並且遇到了這種情況,所以把它放到開放論壇中尋求一些答案。如果表格沒有呈現,reRender的表現如何

我有一個文本字段和豐富的:dataTable裏面的窗體。當textField中的值發生更改時,將填充表數據,並且應該使用最新數據重新對錶進行重新修訂。

現在有問題了:如果我在dataTable中渲染條件說如果值列表非空/非空渲染此表會怎麼樣?因此,第一次出現屏幕時,列表爲空/空,因此不會呈現表格,因爲當我修改textField時,會填充值並且表格上的reRender被觸發,但是整個表格不存在。

有沒有辦法解決這個問題?如果我重新載入頁面,是絕對錶出現:)

下面是該示例代碼:

<h:form id="userSearchForm" prependId="false"> 
     <h:inputText value="#{ldapSearch.searchString}"> 
      <a4j:support event="onkeyup" ignoreDupResponses="true" ajaxSingle="true" reRender="usersTable" 
      requestDelay="50" actionListener="#{ldapSearch.searchUser}"/> 
     </h:inputText> 
      <rich:dataTable id="usersTable" 
       rendered="#{not empty ldapSearch.users}" 
       value="#{ldapSearch.users}" var="user"> 
       <rich:column sortable="false" label="Name"> 
        <f:facet name="header"> 
         <h:outputText value="Name"/> 
        </f:facet> 
        <h:outputText title="#{user.displayName}" value="#{user.displayName}"/> 
       </rich:column> 
      </rich:dataTable> 
    </h:form> 
+0

相關:http://stackoverflow.com/questions/9010734/why-do-i-need-to-nest-a-component-with-rendered-some-in-another-component-w – BalusC 2012-03-01 19:25:16

回答

4

我被周圍的一些組件,它總是呈現DataTable中解決這個問題,然後重新渲染該組件。例如:

<h:form id="userSearchForm" prependId="false"> 
    <h:inputText value="#{ldapSearch.searchString}"> 
     <a4j:support event="onkeyup" ignoreDupResponses="true" ajaxSingle="true" reRender="divUsersTable" 
     requestDelay="50" actionListener="#{ldapSearch.searchUser}"/> 
    </h:inputText> 
    <s:div id="divUsersTable"> 
     <rich:dataTable id="usersTable" 
      rendered="#{not empty ldapSearch.users}" 
      value="#{ldapSearch.users}" var="user"> 
      <rich:column sortable="false" label="Name"> 
       <f:facet name="header"> 
        <h:outputText value="Name"/> 
       </f:facet> 
       <h:outputText title="#{user.displayName}" value="#{user.displayName}"/> 
      </rich:column> 
     </rich:dataTable> 
    </s:div> 
</h:form> 
+0

Ya,I可以做到這一點,或呈現整個形式。但是這種情況對我來說很難理解和理解。 – Satya 2012-03-01 13:39:01

+0

@Satya但這是這種任務的典型解決方案。這種方法很難理解什麼? – 2012-03-01 13:47:40

+1

@Satya你只需要記住,你正在reRendering的元素的id必須存在於頁面中。如果您正在重新生成的ID是有條件呈現的,那麼它可能存在也可能不存在於頁面上。如果組件以前沒有渲染過,那麼它不會被重新渲染。 – 2012-03-01 14:14:10

0

問題是你不能在第一次渲染沒有渲染的東西。我的解決方案是玩組件風格的顯示屬性。

<rich:dataTable id="usersTable" 
    style="display:#{not empty ldapSearch.users? 'inline' : 'none'}"  
    value="#{ldapSearch.users}" var="user"> 
<!-- your columns --> 
</rich:dataTable> 

就這樣,我可以重新表示沒有問題:)。