h:selectOneMenu设置的值在f:ajax监听器方法中为null

时间:2012-01-30 11:19:27

标签: ajax jsf jsf-2

我正在尝试在我的JSF 2.0 Web应用程序中使用AJAX,并且在从selectOneMenu获取当前值时遇到问题。

我的JSF页面的一部分。

<h:panelGrid columns="2">
<h:outputLabel value="Appendix number" for="appendix" />
<h:selectOneMenu id="appendix" value="#{indexMBean.appendix}">
<f:selectItem itemLabel="Point 1" itemValue="1" />
<f:selectItem itemLabel="Point 2" itemValue="2" />
<f:ajax event="change" listener="#{indexMBean.setHazardsByAppendix}" />
</h:selectOneMenu>
</h:panelGrid>

setHazardsByAppendix是indexMBean中的一个过程。然后程序触发我尝试获取h:selectOneMenu的当前值以将其传递给另一个过程。

public void setHazardsByAppendix() {
    Logger logger = Logger.getAnonymousLogger();
    logger.warning(this.appendix);
    this.setHazards(this.hazardSessionBean.getHazardByAppendix(this.appendix));
}

但是字段附录的当前值始终为null。这是怎么造成的,我该如何解决?

3 个答案:

答案 0 :(得分:0)

以一种非常奇怪的方式解决。我创建了一个具有相同来源的新netbeans项目。令人惊讶的是它工作正常。 这真的很奇怪,但它确实有效。

答案 1 :(得分:-1)

   `<f:ajax execute="@this" listener="#{templateSearchHandler.OnDefNameSelect}">
 void setHazardsByAppendix(AjaxBehaviorEvent event) {
    Logger logger = Logger.getAnonymousLogger();
    logger.warning(this.appendix);
    this.setHazards(this.hazardSessionBean.getHazardByAppendix(this.appendix));
}`

答案 2 :(得分:-1)

此代码调用AjaxBehaviour事件并通过Ajax将值传递给控制器​​。

<h:panelGrid columns="2">
<h:outputLabel value="Appendix number" for="appendix" />
<h:selectOneMenu id="appendix" value="#{indexMBean.appendix}">
<f:selectItem itemLabel="Point 1" itemValue="1" />
<f:selectItem itemLabel="Point 2" itemValue="2" />
<f:ajax execute="@this"listener="#{indexMBean.setHazardsByAppendix}" />
</h:selectOneMenu>
</h:panelGrid>
//Controller
public void setHazardsByAppendix(AjaxBehaviorEvent event) {
    Logger logger = Logger.getAnonymousLogger();
    logger.warning(this.appendix);
    this.setHazards(this.hazardSessionBean.getHazardByAppendix(this.appendix));
}