Primefaces не имеет свойства handleDateSelect - PullRequest
2 голосов
/ 05 декабря 2011

Я только начал использовать PrimeFaces и не могу понять, что не так с моим кодом.Он точно такой же, как пример show case, за исключением имен бинов.Я посмотрел на этом сайте ответы безуспешно.

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.

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

3 голосов
/ 10 января 2012

Я разобрался в своей проблеме. Это было связано с использованием неправильного пространства имен. Мне пришлось использовать http://primefaces.org/ui вместо старого.

0 голосов
/ 24 апреля 2013

Пример исходного кода, приведенный в PrimeFaces Showcase, неверен. Метод не должен принимать 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())));  
}
0 голосов
/ 05 декабря 2011

Похоже, что это может быть ошибкой в ​​документации:

Из руководства по Primefaces 2.2:

Выбор Ajax Календарь поддерживает мгновенный выбор 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
    }

По-видимому, программно ожидается наличие свойства в управляемом бине. Вы можете попробовать изменить его на это и посмотреть, если это изменит #{calendarBean.handleDateSelect()}. Вы абсолютно уверены, что не ссылаетесь на handleDateSelect где-либо в разметке?

...