2012-06-05 1 views
1

Я пробовал кучу предложений после googling, но пока никто не работал для меня. Я пытаюсь показать простой datatable с редактируемыми значениями inputText в каждой строке. таблица заполняется из базы данных с помощью обычного списка объектов. Вот моя страница XHTML и управляемый компонентRichfaces редактируемые данныеТаблица, не устанавливающая обновленные значения в Bean

RichFaces 4.2.1, JSF 2 mojarra в комплекте с 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); 
    } 
} 

Вот все, что я пытался. Все они приводят к тому, что только OLD VALUES печатаются на консоль в методе update().

  1. Изменено из богатых: DataTable в обычный старый JSF ч: DataTable, такой же результат
  2. связала DataTable к управляемым свойством бина, проверяется обновление() метод, старые значения печатаются здесь. Я просто сделал getVlaue() в объекте UIDataTable и передал его в List.

    Список должен быть обновлен с измененными значениями из формы, но я не вижу, как это происходит. Я действительно поставил MBean в ViewScope.

ответ

0

См ответить здесь https://community.jboss.org/thread/200684?tstart=0

Я изменил казнить = @ форму и это сработало! нет необходимости в ValueChangeEvent или возиться с привязкой dataTable. Значения списка обновляются на месте, и метод обновления печатает правильное значение

0

У вас есть h: form вне datatable? и вы пытались заменить inputtext полями inplaceinput?

+0

Да, у меня есть h: форма вне таблицы. я замечаю, что, когда я добавляю значениеChangelistener в поле inputText, событие срабатывает, и новые значения устанавливаются в bean-компоненте. странный.... –

Смежные вопросы