Ajaxified SelectOneListBox无法正常工作

时间:2018-01-09 18:44:09

标签: ajax jsf primefaces

我想测试ajaxified <p:selectOneListBox>元素是否正常工作。在基于JSF + PrimeFaces的portlet上,我创建了上面的代码。基本上,在<p:selectOneListBox>列表中的项目选择中,我想要使用先前所选项目的值更新标签。不幸的是,它似乎没有按预期工作。

.xhtml方:

<form id="myform">
    <p:selectOneListbox id="myselect" value="#{bean.optionSelected}">
        <p:ajax listener="#{bean.onChange}" process="myselect" update="toupdate" onstart="onstart()" oncomplete="oncomplete()" onerror="onerror()" onsuccess="onsuccess()"/>
        <f:selectItem itemLabel="Option 1" itemValue="1" />
        <f:selectItem itemLabel="Option 2" itemValue="2" />
        <f:selectItem itemLabel="Option 3" itemValue="3" />
    </p:selectOneListbox>

    <h:outputText id="toupdate" value=">#{bean.optionSelected}" />
</form>

Bean方面:

@ManagedBean(name = "bean")
@ViewScoped
public class Bean implements Serializable {
    private static final long serialVersionUID = 201709131528L;
    private static Logger logger = Logger.getLogger(Bean.class);

    private String optionSelected = "-1";

    public Bean() {

        logger.trace("bean created");
    }

    @PostConstruct
    private void onPostConstruct() {
        logger.trace("start");
    }

    public String getOptionSelected() {
        return this.optionSelected;
    }

    public void setOptionSelected(String optionSelected) {
        logger.trace("start");
        this.optionSelected = optionSelected;
    }

    public void onChange() {
        logger.trace("start");
    }
}

每次从列表中选择一个选项时,我都会从控制台获得以下日志:

Bean:<init>():bean created
Bean:onPostConstruct():start    

从浏览器的控制台我得到以下日志:

onstart():
onerror():
oncomplete():

作为JSF + PF世界的新手,我想知道: 1)为什么不调用onChange()侦听器。 2)为什么没有设置属性optionSelected。 3)为什么在每个选项选择上创建bean bean。 4)为什么ajax请求失败。

任何澄清都会非常准确。感谢。

1 个答案:

答案 0 :(得分:0)

  

作为JSF + PF世界的新手,我想知道:1)为什么不调用onChange()侦听器。 2)为什么没有设置属性optionSelected。 3)为什么在每个选项选择上创建bean bean。 4)为什么ajax请求失败。

我相信您的所有问题都是由于您使用的是html <form>元素而不是JSF <h:form>组件。我能够在我的机器上本地重现所有这些错误(出于某种原因除了#4),一旦我将<form>更改为<h:form>,一切都正常。

有关JSF h:form标记的功能的更多信息,请查看以下链接: