0

ユーザーがinputTextフィールドのアイテムを選択すると、データベースからのデータが入力されます。

選択メニューリストがあります:

<h:selectOneMenu id="blah" value="#{controller.selected.id}" title="#{bundle.CreateTitle_id}" > 
     <f:selectItems value="#{controller.listOfId()}" />
</h:selectOneMenu>

そして、次のような入力テキストがあるとしましょう:

<h:inputText value="In here we place value from backing bean"></h:inputText>

リスト(IDを保持する)からアイテムを選択した後、テキストフィールドにバッキングビーン(名前としましょう)から他のデータを入力するにはどうすればよいですか。

これが私のbackingBeanです:

@ManagedBean(name = "controller")
@SessionScoped
public class Bean implements Serializable {

private Catalog current;// here i'm holding int id, String name and other stuff...
private DataModel items = null;
@EJB
private probaSession.CatalogFacade ejbFacade;
private PaginationHelper pagination;
private int selectedItemIndex;

public KatalogController() {
}

public Katalog getSelected() {
    if (current == null) {
        current = new Catalog();
        selectedItemIndex = -1;
    }
    return current;
}

private KatalogFacade getFacade() {
    return ejbFacade;
}

public PaginationHelper getPagination() {
    if (pagination == null) {
        pagination = new PaginationHelper(10) {

            @Override
            public int getItemsCount() {
                return getFacade().count();
            }

            @Override
            public DataModel createPageDataModel() {
                return new ListDataModel(getFacade().findRange(new int[]{getPageFirstItem(), getPageFirstItem() + getPageSize()}));
            }
        };
    }
    return pagination;
}

//......

public ArrayList<Catalog> listOfId()  { 
          ArrayList<Catalog> list=new ArrayList<Catalog>();
   try{

    String upit="select id from Catalog";

   Statement st=connection.createStatement(); 
   ResultSet rs=st.executeQuery(upit);

   while(rs.next()) {

      Katalog k=new Katalog();
      k.setId(rs.getInt(1));
      k.setName(rs.getString(2));





         list.add(k);


   }

 disconnect();


   }
   catch (Exception ex) {
       ex.printStackTrace();
   }

   return list;
}

それだけです。

説明が必要な場合は、ここにいます。それは簡単だと思います(たとえば、ajaxを使用します)が、それを開始する方法さえわかりません...

4

1 に答える 1

1

でイベントf:ajaxをキャッチするには、(標準であり、多くのコンポーネント ライブラリは拡張バージョンを提供します) を追加する必要があります。changeinputText

<h:selectOneMenu id="blah" value="#{controller.selected.id}" title="#{bundle.CreateTitle_id}" >
  <f:selectItems value="#{controller.listOfId()}" />
  <f:ajax
     event="change"        <-- The event to capture. I believe that if not specified
                                 there is a default event to capture from
                                 each component (for inputText it would be "change")
     render="myForm:foo"  <-- Only repaint "blah"
     listener="#{controller.myBlahListener}"
</h:selectOneMenu>

<h:inputText id="foo" value="#{controller.fooText}"/>

リスナーは の新しい値を読み取り、新しい値を返すthis.getSelected().getId()ようにモデルを変更します (おそらく最も簡単な方法は ですが、それはモデルによって異なります。controller.getFooText()this.setFooTest(this.getSelected().getId()

于 2012-09-20T13:00:56.323 に答える