2つのselectOneMenuコンポーネントを含むテーブルがあります。
最初のselectOneMenuコンポーネントでレコードが選択されると、同じ行のAjaxで他のselectOneMenuが更新されます。
私のテーブル:
<p:dataTable value="#{myBean.myInfo}" var="myInfo">
<p:column>
<f:facet name="header">Group</f:facet>
<h:selectOneMenu value="#{myInfo.myInfoType.code}">
<f:selectItems value="#{myBean.myList}" />
<f:ajax event="change" execute="@this" listener="#{myBean.refershNames}" render="myNames"/>
</h:selectOneMenu>
</p:column>
<p:column>
<f:facet name="header">Name</f:facet>
<h:selectOneMenu id="myNames" value="#{myInfo.myInfoType.secondCode}">
<f:selectItems value="#{myBean.mySecondList}" />
</h:selectOneMenu>
</p:column>
<p:dataTable>
豆で私は持っています:
List<SelectItem> myList,mySecondList;
public void refershNames(AjaxBehaviorEvent event){
//how can I retrieve the selected item and update the relevant record?
}
Ajaxでそれを行うにはどうすればよいですか?JSF2を使用しています
で問題DataModel<E>
のmyInfo
オブジェクトを取得できるように、データテーブル値をラップしますDataModel#getRowData()
。そう、
DataModel<MyInfo> myInfoModel; // +getter
@PostConstruct
public void init() {
myInfo = myInfoDAO.list();
myInfoModel = new ListDataModel<MyInfo>(myInfo);
}
と
<h:dataTable value="#{myBean.myInfoModel}" var="myInfo">
そして
public void refreshNames(AjaxBehaviorEvent event){
MyInfo myInfo = myInfoModel.getRowData();
// Get code and update secondCode.
}
コメントに従って更新してください。ここでは、機能しないと言った後に作成したテストケースを示します。Tomcat 7.0.5とGlassfish 3.0.1の両方で、Mojarra 2.0.3を使用するとうまくいきました。
com.example.Item
public class Item {
private String value1;
private String value2;
// Generate public getters/setters.
}
com.example.Bean
@ManagedBean
@ViewScoped
public class Bean {
private List<Item> items;
private DataModel<Item> model;
private List<String> list;
@PostConstruct
public void init() {
items = Arrays.asList(new Item(), new Item(), new Item());
model = new ListDataModel<Item>(items);
list = Arrays.asList("one", "two", "three");
}
public void change(AjaxBehaviorEvent e) {
Item item = model.getRowData();
item.setValue2(item.getValue1());
}
public DataModel<Item> getModel() {
return model;
}
public List<String> getList() {
return list;
}
}
test.xhtml
<h:form>
<h:dataTable value="#{bean.model}" var="item">
<h:column>
<h:selectOneMenu value="#{item.value1}">
<f:selectItem itemLabel="select..." itemValue="#{null}" />
<f:selectItems value="#{bean.list}" />
<f:ajax execute="@this" listener="#{bean.change}" render="list2" />
</h:selectOneMenu>
</h:column>
<h:column>
<h:selectOneMenu id="list2" value="#{item.value2}">
<f:selectItem itemLabel="select..." itemValue="#{null}" />
<f:selectItems value="#{bean.list}" />
</h:selectOneMenu>
</h:column>
</h:dataTable>
</h:form>
このテストケースは、1列目のドロップダウン値を変更すると、同じ行の2列目のドロップダウン値が反映されて同じ値を取得することを証明しています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加