0

だから私はたくさんのInputText-Boxを持っていて、それはある種の顧客データ(customer-id、firstname、lastnameなど)を表現しています

ここで、有効なcustomer-idを入力したときに、すべてのInputText-Boxを(対応するmysqlデータで)自動入力したいと思います。

<h:inputText id = "customer_id" value="#{reservationHandler.customer.customer_id}"/>

現在の顧客IDをマネージドBeanに渡すには、Ajaxを使用する必要があると思いますが、これを行うにはどうすればよいですか?そして、他のInputText-Boxをどのように埋めますか?

前もって感謝します。

4

1 に答える 1

1

<f:ajax>このタスクは、JSF 2に付属しているタグを使用して実行でき、このチュートリアルでよく説明されています。最初の例は、目前のタスクを実行する方法を示しています。もう1つのアドバイスは@ViewScoped、BalusCブログ投稿で説明されているように、マネージドBeanにアノテーションを使用することです。JSF2.0での通信-マネージドBeanスコープ

このすべての情報と使用しているマネージドBeanを使用すると、デモは次のようになります。

カスタマークラス

public class Customer {
    private int customer_id;
    private String name;
    //constructor, getters and setters...
}

ReservationHandlerマネージドBean

@ManagedBean
@ViewScoped
public class ReservationHandler {
    private Customer customer;
    //this EJB will retrieve the Customer data
    //if you don't have it like this, then use your own 
    //custom CustomerService class/implementation to retrieve the data from dabatase
    @EJB
    private CustomerService customerService;
    //constructor, getters and setters...
    @PostConstruct
    public void init() {
        customer = new Customer();
    }
    public void showCustomerDataListener(AjaxBehaviorEvent event) {
        Customer customerFromDB =
            customerService.getCustomer(customer.getCustomer_id());
        if (customerFromDB != null) {
            customer = customerFromDB;
        }
    }
}

カスタマーフェイスレットビュー(関連するコードのみ)

<h:form>
    <h:outputText value="Customer ID:" />
    <h:inputText id="customer_id"
        value="#{reservationHandler.customer.customer_id}">
        <f:ajax event="blur"
            listener="#{reservationHandler.showCustomerDataListener}"
            render="customer_name" />
    </h:inputText>
    <h:outputText value="Customer name:" />
    <h:inputText id="customer_name"
        value="#{reservationHandler.customer.name}" />
</h:form>

Customerクラスが複数の属性を持っている場合、2つのオプションがあります。

  1. renderコンポーネントの属性にすべての入力のIDを設定します<f:ajax>が、これは非常に単純です。

  2. すべてのコンポーネントをでグループ化し、UIContainerこのUIContainerをレンダリングします。Customerクラスに追加のprivate String address属性があると仮定した例:

    <h:form>
        <h:outputText value="Customer ID:" />
        <h:inputText id="customer_id"
            value="#{reservationHandler.customer.customer_id}">
            <f:ajax event="blur"
                listener="#{reservationHandler.showCustomerDataListener}"
                render="customerData" />
        </h:inputText>
        <h:panelGrid id="customerData" columns="2">
            <h:outputText value="Customer name:" />
            <h:inputText id="customer_name"
                value="#{reservationHandler.customer.name}" />
            <h:outputText value="Address:" />
            <h:inputText id="customer_address"
                value="#{reservationHandler.customer.address}" />
        </h:panelGrid>
    </h:form>
    

cnaが適用されるサポートされているイベントを知るには、 f:ajax JSFコアタグリファレンス、イベントタグ属性の説明<f:ajax event="what_to_write_here">を参照してください。

「クリック」、「変更」、「ぼかし」、「キープレス」など、Ajaxリクエストを呼び出すイベント。イベントは、Ajax動作が有効になっているコンポーネントによってサポートされている必要があります。注:イベント名は、「on」プレフィックスのないDOMイベント名と同じであるため、「onclick」イベントの場合、正しいイベント名は「click」です。「action」イベントはh:commandButtonやh:commandLinkなどのコマンドコンポーネントでサポートされ、「valueChange」イベントはh:inputTextやh:selectOneMenuなどの入力コンポーネントでサポートされます。

于 2013-01-21T16:44:17.807 に答える