通过AjaxListener更新值

时间:2014-07-10 06:09:39

标签: java ajax primefaces xhtml

我的问题是,我有两个字段。这是定义:

       <h:selectOneMenu id="selectSource" update=":relationTableForm:selectObject" value="#{tabDefineRelationTable.sourceId}" style="width: 100%;" required="true" requiredMessage="Source is required">
                <p:ajax listener="#{tabDefineRelationTable.handleSourceChange}"   /> 
                <f:selectItem itemLabel="Select Source" itemValue="0" noSelectionOption="true" />
                <f:selectItems value="#{tabDefineRelationTable.mySources}"
                    update=":createArtifactForm:selectObject"
                    var="source"
                    itemLabel="#{source.s_name}"
                    itemValue="#{source.s_id}" />
            </h:selectOneMenu>
            <h:selectOneMenu id="selectObject" value="#{tabDefineRelationTable.objectId}" style="width: 100%;" required="true" requiredMessage="Object is required" onchange="submit()">
                <f:selectItem itemLabel="first select Source" itemValue="0" noSelectionOption="true" />
                <f:selectItems value="#{tabDefineRelationTable.myObjects}"
                    var="object"
                    itemLabel="#{object.o_name}"
                    itemValue="#{object.o_id}" />
            </h:selectOneMenu>

我想实现,如果我在selectSource字段中选择,我会在后端更新变量objectId,并在我的前端看到它。

这是我第一次尝试实现它: 变量定义

private List<Source> mySources;
private List<Objects> myObjects;
private Integer sourceId = 0;
private Integer objectId = 0;

构造

public TabDefineRelationTable (TabLoader parent, List<Source> sources, List<Objects> objects) {
    parentForm = parent;

    mySources = sources;
    myObjects = objects;
}

监听器:

public void handleSourceChange() {
    this.objectId = 0;
    if (sourceId != 0) {
        for (Source curSource : mySources) {
            if (curSource.getS_id() == sourceId) {
                myObjects.clear();
                myObjects.addAll(curSource.getObjects());
            }
        }
    }       
}

非常感谢。

祝你好运 的Björn

更新1: 我尝试使用<p:ajax event="select" update="tabView:relationTableForm:selectObject" listener="#{tabDefineRelationTable.handleSourceChange}" />后的解决方案,

<p:ajax event="select" update=":relationTableForm:selectObject" listener="#{tabDefineRelationTable.handleSourceChange}" />

<p:ajax event="select" update=":selectObject" listener="#{tabDefineRelationTable.handleSourceChange}" />

我收到了这个错误消息:Cannot find component with identifier "tabView:relationTableForm:selectObject" referenced from tabView:relationTableForm:selectSource".

还有其他想法吗?

更新2: update="@([id$=output])"测试了这一个。没有出错,但该字段也没有更新:/

2 个答案:

答案 0 :(得分:1)

你可以试试这个..

 <p:ajax update="selectObject" listener="#{tabDefineRelationTable.handleSourceChange}"   /> 

答案 1 :(得分:0)

解决方案是将ajax线更改为 <p:ajax update="selectObject" listener="#{tabDefineRelationTable.handleSourceChange}" />

非常感谢serdar的帮助!