selectOneMenu用于内部表中JSF2 [英] selectonemenu inside table in jsf2

查看:137
本文介绍了selectOneMenu用于内部表中JSF2的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个表2 selectOneMenu用于组件。

I have a table with 2 selectOneMenu components.

我想,一旦一个记录被选为第一selectOneMenu用于组件将更新其他selectOneMenu用于与阿贾克斯同排。

I would like that once a record was chosen in the first selectOneMenu component it will update the other selectOneMenu with Ajax in the same row.

我的表:

<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

How can I do it with Ajax? I am using JSF2

推荐答案

裹的数据表值的 的DataModel&LT; E&GT; 这样就可以得到 MyInfo的通过 <$ C有问题的对象$ C>的DataModel#getRowData() 。因此,

Wrap the datatable value in DataModel<E> so that you can obtain the myInfo object in question by DataModel#getRowData(). So,

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.
}


更新作为每个注释,这里是我创建后告知,没有工作的测试用例。它的工作对我来说与Mojarra 2.0.3两个Tomcat的7.0.5和Glassfish 3.0.1。


Update as per the comments, here is the testcase I created after you told that it didn't work. It worked for me with Mojarra 2.0.3 on both Tomcat 7.0.5 and Glassfish 3.0.1.

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>

此测试用例证明无论何时在第一列改变下拉值,然后在相同的行中的第二列中的下拉值将被反射以检索相同的值。

This testcase proves that whenever you change a dropdown value in the 1st column, then the dropdown value in the 2nd column in the same row will be reflected to retrieve the same value.

这篇关于selectOneMenu用于内部表中JSF2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆