<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つのオプションがあります。
render
コンポーネントの属性にすべての入力のIDを設定します<f:ajax>
が、これは非常に単純です。
すべてのコンポーネントをでグループ化し、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などの入力コンポーネントでサポートされます。