0

入力テキストフィールドの保存または更新の問題については良いので、すでに多くの時間を費やしました。要点に進みます。いくつかの基本的な属性を持つ基本的な単一の入力テキストがあります

<h:inputText id="name" value="#{salesController.selectedSalesName}" />

これはinputText値のゲッターです

public String getSelectedSalesName(){
    for(DealerListView dealer : dealerList){
        if(dealer.getDealerId() == getSelectedDealerId()){
            return dealer.getName();
        }
    }
    return "";  
}   

そこにネストされ、ajaxタグを使用します

<f:ajax event="change" render="name" listener="#{salesController.updateSelectedSalesName()}" />

入力テキストフィールドを更新するための here is back Bean メソッド

public void updateSelectedSalesName() {     

        DealerData dealDat = BeanFactory.getHotelDAOService(DealerData.class).findOne(selectedDealerId);
        dealDat.setName(name);
        BeanFactory.getHotelDAOService(DealerData.class).update(dealDat);     
}

これの全体の結果は、言うスタックトレースです

value="#{salesController.selectedSalesName}": プロパティ 'selectedSalesName' はタイプ sk.hotel.web.controller.SalesController で書き込み可能ではありません

そのゲッターメソッドに何か変更が必要であることは知っていますが、データベースへの値の正しい更新を行う結果なしでいくつかの組み合わせを試してください。

(送信にはコマンドボタンを使用せず、そのinputTextフィールドでEnterキーを押したときの応答のみを更新します。)バックビーンまたはjsfレイアウトで、または誰かがすでに同様の状況を解決したかどうかにかかわらず、この保存/更新プロセスを変更する方法についてのガイドが必要です、そして彼の解決策を共有できます。

皆様アドバイス投稿ありがとうございます。よろしく、良い一日を

4

2 に答える 2

4

まず、フィールドを追加します。

  String selectedSalesName;

セッターとセッターを追加します。

  public String getSelectedSalesName() {
     return selectedSalesName;
  }
  public void setSelectedSalesName(String selectedSalesName) {
     this.selectedSalesName = selectedSalesName;
  }

ajaxListener(AjaxBehaviurEvent event) を追加して、新しいディーラーを作成するか、現在のディーラーを更新します

  public void ajaxListener(AjaxBehaviorEvent event) {
     Dao dao = BeanFactory.getHotelDAOService(DealerData.class)
     if (selectedDealerId == null) {
        DealarData dealerData= new DealerData();
        dealerDate.setName(getSelectedSalesName());
        dao.add(dealerData);
        setDealer(dealerData);
     } else {
        DealerData dealDat = dao.findOne(selectedDealerId);
        dealDat.setName(name);
        dao.update(dealDat);
     }
  }

現在のディーラーへのセッター

  int selectedDealerId;
  public void setDealer(DealerData dealer) {
        selectedDealerId = dealer.getId();
        selectedSalesName = dealer.getName();
  }

そしてxhtmlページ:

  <h:inputText value="#{salesController.selectedSalesName}" id="idSalesInput">
        <a4j:ajax event="keyup" listener="#{salesController.ajaxListener}" 
               execute="idSalesInput"/>
  </h:inputText>

聞きたいイベントの「keyup」を変更します。

キーを押すと、リスナーが呼び出され、idSalesInput の値が送信されます (setSelectedSalesName() メソッドがここで呼び出されます。このため、Property 'selectedSalesName' not writable 例外が発生します)。新しいディーラーデータ。

よい一日を。下手な英語でごめんなさい!

于 2013-03-01T11:45:21.997 に答える
1

あなたのバインディング値はinputText双方向です。値を計算するためにゲッターが呼び出されるよりもレンダリングされるとき、それが送信されるとき(AJAXイベントのように)、バッキングBeanに値を設定するためにそのプロパティに対してセッターが呼び出されます。そのため、JSF は を呼び出そうとしますsetSelectedSalesName(String value)。JSF はプロパティを書き込めません。つまり、セッターを呼び出すことができません。

以下も参照してください。

于 2013-03-01T10:51:24.287 に答える