2011-12-05 19 views
2

我刚开始使用PrimeFaces,无法确定我的代码有什么问题。除了bean名称之外,它与show case样例完全相同。我看着这个网站的答案没有成功。primefaces没有属性'handleDateSelect'

PrimeFaces:

<p:calendar value="#{securityForecastReturnBean.date}" 
        mode="inline" onSelectUpdate="inputsGrowl" 
        selectListener="#{securityForecastReturnBean.handleDateSelect}" 
        required="true" /> 

的Java Bean:

@Component 
@Scope("request") 
@ManagedBean 
public class SecurityForecastReturnBean { 
public void handleDateSelect(DateSelectEvent event) { 
     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
     FacesContext facesContext = FacesContext.getCurrentInstance(); 
     facesContext.addMessage(null, 
       new FacesMessage(FacesMessage.SEVERITY_INFO, "Date Selected", 
         format.format(event.getDate()))); 
    } 

}

它应该是真的简单但它是说,我的豆没有这个属性?

这里是确切的错误信息:

javax.servlet.ServletException: /security_page.xhtml: The class 'com.ls.forecast.webui.beans.SecurityForecastReturnBean' does not have the property 'handleDateSelect'. 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:325) 
com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:546) 
com.sun.faces.application.view.JspViewHandlingStrategy.executePageToBuildView(JspViewHandlingStrategy.java:363) 
com.sun.faces.application.view.JspViewHandlingStrategy.buildView(JspViewHandlingStrategy.java:154) 
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100) 
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
javax.faces.webapp.FacesServlet.service(FacesServlet.java:313) 

我使用PrimeFaces 2.2.1。

任何帮助将不胜感激!

回答

0

这看起来可能是文档中的错误:

从Primefaces指南2.2:

阿贾克斯选择 日历支持即时AJAX的选择,这意味着每当日期选定了服务器端 selectListener可以使用org.primefaces.event.DateSelectEvent实例作为参数 进行调用。可选的onSelectUpdate选项允许更新页面上的其他组件。

<p:calendar value="#{calendarBean.date}" onSelectUpdate="messages" 
     selectListener="#{calendarBean.handleDateSelect}" /> 
     <p:messages id="messages" /> 

    public void handleDateSelect(DateSelectEvent event) { 
     Date date = event.getDate(); 
     //Add facesmessage 
    } 

编程方式似乎期望在托管bean的属性。你可以尝试改变它,看看它是否有所作为#{calendarBean.handleDateSelect()}。你确定你没有在标记中的其他地方引用handleDateSelect

+0

感谢您的回复。我尝试添加括号'securityForecastReturnBean.handleDateSelect()'而没有运气:相同的错误消息。我也确定我没有在任何其他标记上引用handleDateSelect方法,因为它是唯一被调用的地方。 – user899757

0

在PrimeFaces展示中给出的源代码示例是错误的。该方法不应该采取org.primefaces.event.SelectEvent,它应该采取org.primefaces.event.DateSelectEvent。现在快速更改源代码示例如下所示:

public void handleDateSelect(DateSelectEvent event) { 
    FacesContext facesContext = FacesContext.getCurrentInstance(); 
    SimpleDateFormat format = new SimpleDateFormat("d/M/yyyy"); 
    facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Date Selected", format.format(event.getDate()))); 
}