我在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()方法中打印控制檯的舊值。
- 從富更改:DataTable添加到普通老式JSF H:dataTable中,相同的結果
綁定數據表到受管Bean屬性,在update()方法檢查,這裏正在印刷舊值太。我只是在UIDataTable對象上做了一個getVlaue()並將其轉換爲List。
該列表應該已更新表格中的值,但我沒有看到它發生。我確實要將MBean放入ViewScope中。
是的,我在表格外部有一個h:表格。我注意到,當我添加一個valueChangelistener到inputText字段時,事件觸發並在bean上設置新值。奇怪.... –