2012-01-30 61 views
1

我試圖在我的JSF 2.0 Web應用程序中使用AJAX,並從selectOneMenu獲取當前值時出現問題。由h:selectOneMenu設置的值在f:ajax監聽器方法中爲null

我的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)); 
} 

但字段附錄的當前值始終爲空。這是如何造成的,我該如何解決這個問題?

+0

附錄是什麼類型的? – mrembisz 2012-01-30 12:24:50

+0

顯示您的'@ ManagedBean'類聲明和所有註釋導入。我懷疑你沒有使用有效的JSF託管bean作用域註釋,因此它默認爲'@ NoneScoped'(即它在每次調用時重建)。調試'setAppendix()'方法應該證實這一點。如果該值已設置,但在偵聽器方法中它變爲「null」,那麼您就知道了。 – BalusC 2012-01-30 13:02:53

+0

BalusC,謝謝你的回答。我現在無法顯示代碼,現在我在家裏沒有工作。但我可以說這個bean被標註爲@SessionBean。 – 2012-01-30 14:43:27

回答

-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)); 
}` 
+0

這是如何解決具體問題的?你沒有以任何方式解釋具體問題。 – BalusC 2012-01-30 13:02:11

+0

在你控制器listnersetHazardsByAppendix(AjaxBehaviorEvent事件)比你有當前值在 appendix varable通過調用 – 2012-01-30 13:14:29

+0

我還是看不到**解釋了OP正面臨的問題以及解決問題的方式。 OP迄今已發佈合法有效的代碼。 – BalusC 2012-01-30 13:21:12

-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)); 
} 
0

以非常奇怪的方式解決。我使用相同的來源創建了一個新的netbeans項目。令人驚訝的是,它工作正常。 這是一個非常奇怪的,但它的作品。