1

グーグルした後、たくさんの提案を試しましたが、今のところうまくいきませんでした。各行に編集可能なinputText値を持つ単純なデータテーブルを表示しようとしています。テーブルは、通常のオブジェクトのリストを介してデータベースから入力されています。これが私のxhtmlページとマネージドBeanです

Richfaces 4.2.1、JBoss 7.1、JDK1.6にバンドルされたJSF2 mojarra

<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. rich:dataTableからプレーンな古いJSF h:dataTableに変更されました。同じ結果です

  2. dataTableをManagedBeanプロパティにバインドし、update()メソッドでチェックインすると、古い値もここに出力されます。UIDataTableオブジェクトに対してgetVlaue()を実行し、それをListにキャストしました。

    リストはフォームから変更された値で更新されているはずですが、私はそれが起こっているのを見ていません。MBeanをViewScopeに配置することを確認しました。

4

2 に答える 2

0

データテーブルの外にah:formがありますか?inputtextをinplaceinputフィールドに置き換えようとしましたか?

于 2012-06-05T12:49:02.357 に答える
0

ここで回答を参照してくださいhttps://community.jboss.org/thread/200684?tstart=0

execute = @ formを変更しましたが、機能しました。ValueChangeEventやdataTableバインディングをいじる必要はありません。リスト値はその場で更新され、updateメソッドは正しい値を出力します

于 2012-06-05T14:49:52.980 に答える