基于selectOneMenu onchange重新渲染组件

时间:2012-01-05 03:44:36

标签: jsf seam

也许有人可以为我解决这个问题。 我有一个h:selectOneMenu,只要用户从列表中选择一些内容然后根据结果重新呈现链接就应该做某事。

<h:selectOneMenu value="#{backingBean.itemSelected}"  valueChangeListener="#{backingBean.methodThatDoesStuff}" onchange="submit()" >
    <s:selectItems var="_items" value="#{backingBean.itemList}"
                    label="#{_items.Name}"  /> 
    <s:convertEntity />
</h:selectOneMenu>

我的假设是,当用户选择一个项目时,它会填充辅助bean中的一个字段,然后运行methodThatDoesStuff。 但那并没有发生。在调用方法之后,才会设置backingBean.itemSelected。我可以在方法中直接使用它:

public void methodThatDoesStuff(ValueChangeEvent event){
        Item item = (Item)event.getNewValue();
            .... do stuff, set a flag to display link later
    }

这很有效。

但是这会让我的aComponent设置为前一个值,所以第一次它将为null,然后将根据最后一个itemSelected更改设置(所以我总是落后一个:

public void methodThatDoesStuff(){

            Item item = this.itemSelected;  
                .... do stuff, set a flag to display link later
        }

我试过了:

<h:selectOneMenu value="#{backingBean.itemSelected}" >
<s:selectItems var="_items" value="#{backingBean.itemList}" label="#{_items.Name}"  /> 
<a:support event="onchange" ajaxSingle="true" reRender="aComponent" action="#{backingBean.methodThatDoesStuff}" />
<s:convertEntity />
</h:selectOneMenu>

但是,无论我是否使用ValueChangeEvent,这都不起作用。 使用事件对象是获取当前所选项目的唯一方法吗? 这是JSF 1.2和Seam 2

1 个答案:

答案 0 :(得分:0)

immediate="true"上设置属性selectOneMenu