2012-06-05 72 views
1

我在Google搜索之後嘗試了一堆建議,但目前爲止還沒有任何工作可以爲我工作。我正試圖在每行中顯示一個帶有可編輯inputText值的簡單數據表。表正在從數據庫通過通常的對象列表填充。這是我的XHTML頁面和管理的BeanRichfaces可編輯數據表在Bean中未設置更新值

RichFaces的4.2.1,JSF 2鑽嘴魚科與JBoss 7.1捆綁在一起,JDK 1.6

<rich:dataTable value="#{wlScoreBean.scoreList}" binding="#{wlScoreBean.scoreTable}" var="item" id="table" style="width:100%"> 
     <rich:column> 
      <f:facet name="header">PARAM NAME</f:facet> 
      <h:outputText value="#{item.paramName}" /> 
     </rich:column> 
     <rich:column> 
      <f:facet name="header">1 Score</f:facet> 
      <h:inputText value="#{item.name1}" /> 
     </rich:column> 
     <rich:column> 
      <f:facet name="header">2 Score</f:facet> 
      <h:inputText value="#{item.name2}" /> 
     </rich:column> 
     </rich:dataTable> 

     <br/> 
     <h:panelGrid columns="3" id="buttonRow"> 
      <a4j:commandButton value="Save" render="table" execute="@this" action="#{wlScoreBean.update()}">      
      </a4j:commandButton> 
     </h:panelGrid> 



import java.io.Serializable; 
import java.util.List; 

import javax.annotation.PostConstruct; 
import javax.ejb.EJB; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.faces.component.html.HtmlDataTable; 
import javax.faces.event.ValueChangeEvent; 

import org.richfaces.component.UIDataTable; 


@ManagedBean(name = "wlScoreBean") 
@ViewScoped 
public class WS implements Serializable 
{ 

    private static final long serialVersionUID = 1L; 

    private HtmlDataTable scoreTable; 
    private List<WorkloadScore> scoreList; 

    public void watchScore(ValueChangeEvent e) 
    { 
     System.out.println("old value="+e.getOldValue() + ", New Value="+e.getNewValue()); 
    } 

    public List<WorkloadScore> getScoreList() { 
     return scoreList; 
    } 

    public void setScoreList(List<WorkloadScore> scoreList) { 
     this.scoreList = scoreList; 
    } 

    @EJB 
    private WorkloadScoreManagerService wlScoreManager; 

    public HtmlDataTable getScoreTable() { 
     return scoreTable; 
    } 

    public void setScoreTable(HtmlDataTable scoreTable) { 
     this.scoreTable = scoreTable; 
    } 

    public WorkloadScoreBean() 
    { 

    } 

    @PostConstruct 
    private void getAllScores() 
    { 
     this.scoreList = wlScoreManager.getAllScores(); 
    } 

    public void update() 
    { 

     for (WorkloadScore wls : getScoreList()) 
     { 
      System.out.println(wls.getParamName()+"="+wls.getPortabilityScore()+","+wls.getVirtualizationScore()); 
     } 

     //wlScoreManager.update(workloadScore); 
    } 
} 

這裏就是我試過的東西。所有這些只會導致在update()方法中打印控制檯的舊值。

  1. 從富更改:DataTable添加到普通老式JSF H:dataTable中,相同的結果
  2. 綁定數據表到受管Bean屬性,在update()方法檢查,這裏正在印刷舊值太。我只是在UIDataTable對象上做了一個getVlaue()並將其轉換爲List。

    該列表應該已更新表格中的值,但我沒有看到它發生。我確實要將MBean放入ViewScope中。

回答

0

你有一個h:表格以外的數據表嗎?並且你是否嘗試用inplaceinput字段替換inputtext?

+0

是的,我在表格外部有一個h:表格。我注意到,當我添加一個valueChangelistener到inputText字段時,事件觸發並在bean上設置新值。奇怪.... –

相關問題