2013-10-01 35 views
1

我試圖在rich:dataTable內使用rich:inplaceInput實現可編輯行。這裏的問題是編輯後的值沒有反映在後臺bean中。Richfaces inplace輸入數據表內沒有更新後臺bean中的值

<rich:column width="200px"> 
    <f:facet name="header"> 
     <h:outputText value="Roles" /> 
    </f:facet> 

    <rich:inplaceInput id="roleText" value="#{role}" inputWidth="60px" controlsHorizontalPosition="right" 
         showControls="true" editEvent="none"> 
     <f:facet name="controls"> 
      <h:panelGroup> 
       <h:commandButton id="saveEdit" value="Save" 
            action="#{manageRolesBean.editRoleAction}" 
            image="/images/indicator_accept.gif" alt="Save" /> 

       <h:commandButton id="cancelEdit" value="Cancel" 
            onclick="#{rich:component('rolesForm:roleText')}.cancel(); return false;" 
            image="/images/indicator_reject.gif" alt="Cancel" /> 
      </h:panelGroup> 
     </f:facet> 
    </rich:inplaceInput> 
</rich:column> 

單擊保存按鈕,在後臺bean中給出一個空字符串。我已經使用A4J嘗試:actionParam讀取來自客戶端的價值,但是,這並不工作,要麼:

<a4j:actionparam name="editedValue" value="#{rich:findComponent('roleText').value}" assignTo="#{manageRolesBean.role.name}" /> 

我限制在JSF 1.2和RichFaces的3.3.X.描述的解決方案here引用了更新的版本。如何將編輯後的值保存在後臺bean中?

回答

0

我在下面的代碼中使用Seam組件作爲支持bean和值更改偵聽器。希望這可以幫助。

<h:form> 
... 
    <rich:column ...>   
     <rich:inplaceInput id="someString" value="#{someSeamComponent.someString}" 
          valueChangeListener="#{someSeamComponent.process}"> 
      <a:support event="onviewactivated"/> 
     </rich:inplaceInput> 
    </rich:column> 
... 
</h:form> 

import org.jboss.seam.annotations.Name; 
import javax.faces.event.ValueChangeEvent; 

@Name("someSeamComponent") 
public class SomeSeamComponent { 
    private String someString; 

    // getters and setters 

    public void process(ValueChangeEvent event) { 
     // event.getSource().getId() -> to distinguish the source. you may construct id using rowKeyVar or smth 
     Object newVal = event.getNewValue(); 
    } 
} 

提示:具有新值someString觸發器的setter。