0

使用している画面があります

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:body>

    <h:form>
    <f:event listener="#{pageload.getPageLoad}" type="preRenderView" />
    <h:dataTable value="#{pageload.fieldConfig}" var="field" 
    columnClasses="lblFirstCol,lblSecondCol,lblThirdCol,lblFourthCol" id="table1" styleClass="tblSecond" >
        <h:column >
        <h:outputText value="#{field.label_name}" />
        </h:column>
        <h:column>              
            <h:inputText value="#{searchdevice.device.terminal_name}" />
        </h:column>

    </h:dataTable> 

    <h:commandButton value="Submit" action="#{searchdevice.searchButtonAction}"/>
    </h:form>
</h:body>

そして私のバッキングビーン

@ManagedBean(name="pageload")
@RequestScoped
public class PageLoadBean {

private List<FieldConfigVO> fieldconfig;
      //getters and setters

      // method  to populate the ArrayList
      public void getPageLoad(){
                   //getting populated from Database
         fieldconfig = common.getFieldConfig("001");        
      }  
  }

もう一方の入力 Bean

@ManagedBean(name="searchdevice")
@RequestScoped
 public class SearchDeviceBean {

private DeviceVO device;




public SearchDeviceBean() {
    device = new DeviceVO();
}

public DeviceVO getDevice() {
    return device;
}

public void setDevice(DeviceVO device) {
    this.device = device;
}

public String searchButtonAction(){
    System.out.println(device.getTerminal_name()+"****TERMINAL NAME******");
            FacesContext context = FacesContext.getCurrentInstance();
    if (context.getMessageList().size() > 0) {
        return(null);
    }else {

        return("success");
    }

}
     }

私のデバイス オブジェクトには terminal_name プロパティがあります。SearchDeviceBean のメソッドを呼び出すコマンド ボタンがあり、入力した値が入力されないフォームを送信します。

どんな助けでも大歓迎

4

1 に答える 1

0

preRenderViewイベントでデータ初期化ロジックを実行しています。これは、ポストバック用にモデルを準備する必要があるコードの不適切な場所です。フォームの送信中に JSF がモデル値を更新する必要がある場合、完全に空fieldConfigになっているため、JSF は送信/変換/検証された値をそこに設定できません。あなたのfieldConfig場合は、後のフェーズであるレンダリング応答フェーズでのみ準備されるため、遅すぎます。

代わりに初期化する必要があります@PostConstruct。これは、Bean の構築とジェクションでの依存関係の直後に呼び出されます。<f:event>全体を完全に取り除き、メソッドに@PostConstruct注釈を付けます。ちなみに、そのメソッドの名前をorgetPageLoad()に変更したいのですが、それはまったくゲッターメソッドではないため、コードを読んだり保守したりする他の人にとって非常に紛らわしい名前です。init()loadFieldConfig()

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

于 2013-09-16T13:43:30.630 に答える