2012-09-24 57 views
0

(使用JSF-2)在確定時代編輯行時使用JSF

我有一列的DataTable可以編輯導航到一個錨:

 <h:column> 
      <f:facet name="header"> 
       <h:outputText value="Label" style="font-weight: bold"> 
       </h:outputText> 
      </f:facet> 
      <h:inputText value="#{m.author2displayed}" rendered="#{m.editable}" size="10"/> 
      <h:outputText value="#{m.author2displayed}" rendered="#{not m.editable}"/> 
      <h:commandButton value="save edits" rendered="#{m.editable}" onclick="submit()" action ="#{finalCheckBean.saveedits()}"/> 
     </h:column> 

當我點擊「保存編輯「,我們保持相同的視圖,這是所需的效果(finalCheckBean.saveedits()返回null)。

問題:瀏覽器全部滾動回頁面頂部,而我希望頁面保持顯示在剛剛編輯的行級別。我怎樣才能做到這一點?

回答

2

如果您已經使用JSF2,只需在命令按鈕中使用<f:ajax>即可引入一些AJAX魔術。將待執行和渲染的組件包裝在通用組件中,並在<f:ajax>executerender中引用它。

<h:column> 
    <f:facet name="header"> 
     <h:outputText value="Label" style="font-weight: bold" /> 
    </f:facet> 
    <h:panelGroup id="author2displayed"> 
     <h:inputText value="#{m.author2displayed}" rendered="#{m.editable}" size="10"/> 
     <h:outputText value="#{m.author2displayed}" rendered="#{not m.editable}"/> 
     <h:commandButton value="save edits" rendered="#{m.editable}" onclick="submit()" action="#{finalCheckBean.saveedits()}"> 
      <f:ajax execute="author2displayed" render="author2displayed" /> 
     </h:commandButton> 
    </h:panelGroup> 
</h:column> 

這樣滾動條的位置將保持不變(前提是你還是從操作方法返回nullvoid)。

+0

這個工程,但現在我的組件渲染不再同步 - 恐懼的另一個問題的時間... – seinecle

+0

這只是一個開球的例子,基於對迄今爲止提供的代碼的猜測。這個輸出,輸入和按鈕的具體功能要求在問題中沒有提到。至少,您可以在'execute'屬性中控制哪些輸入需要處理,以及在render屬性中哪些組件需要更新。他們可以採用一個空間分隔的多個客戶端ID字符串。請注意,只要視圖處於活動狀態(但基於之前的問題,您已經知道這一點),輔助bean必須被視爲作用域才能生存) – BalusC