2013-07-02 3 views
1

Спецификация проекта: JSF 2.1.2, Primefaces-Mobile 0.9.5, Primefaces 3.5 Я пытаюсь реализовать функцию автозаполнения поверхностей с мгновенным выбором ajax, ниже приведен код:JSF-Primefaces Autocomplete onselect прослушиватель событий не работает - Methodnotfound Exception

<pm:content> 
       <p:panel header="header1" toggleable="true" id="panel1"> 
        <h:form> 
         <p:autoComplete value="#{analyzerFilterInput.ipAddress}" 
          completeMethod="#{analyzerFilterInput.getIpAddrList}"> 
          <p:ajax event="itemSelect" 
           listener="analyzerFilterInput.handleSelect" update="msg" /> 
         </p:autoComplete> 
         <p:messages id="msg" /> 
        </h:form> 
       </p:panel> 
       <p:panel header="header2" toggleable="true" id="panel2"> 
       </p:panel> 
      </pm:content> 

View-Scoped Класс AnalyzerFilterInput

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 

import javax.faces.application.FacesMessage; 

import org.primefaces.event.SelectEvent; 

public class AnalyzerFilterInput implements Serializable 
{ 

    private static final long serialVersionUID = 1L; 
private String ipAddress; 
private List<String> ipAddrs; 

    public AnalyzerFilterInput() 
    { 
     ipAddrs = new ArrayList<String>(); 
    } 

    public String getIpAddress() 
    { 
     return ipAddress; 
    } 

    public void setIpAddress(String ipAddress) 
    { 
     this.ipAddress = ipAddress; 
    } 
public List<String> getIpAddrList(String query){ 
     ipAddrs.clear(); 
     ipAddrs.add("192.168.1.1"); 
     ipAddrs.add("192.168.1.2"); 
     ipAddrs.add("192.168.1.3"); 
     return ipAddrs; 
    } 

    public void handleSelect(SelectEvent event) { 
     Object item = event.getObject(); 
     FacesMessage msg = new FacesMessage("Selected", "Item:" + item); 
     } 
} 

Я получаю исключение Methodnotfound, может кто-то помочь мне в решении этого?

javax.el.MethodNotFoundException: Method not found: [email protected](org.primefaces.event.SelectEvent) 
at com.sun.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:155) 
at com.sun.el.parser.AstValue.invoke(AstValue.java:231) 
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297) 
at org.primefaces.component.behavior.ajax.AjaxBehaviorListenerImpl.processCustomListener(AjaxBehaviorListenerImpl.java:70) 
at org.primefaces.component.behavior.ajax.AjaxBehaviorListenerImpl.processArgListener(AjaxBehaviorListenerImpl.java:59) 
at org.primefaces.component.behavior.ajax.AjaxBehaviorListenerImpl.processAjaxBehavior(AjaxBehaviorListenerImpl.java:47) 
at org.primefaces.event.SelectEvent.processListener(SelectEvent.java:40) 
at javax.faces.component.behavior.BehaviorBase.broadcast(BehaviorBase.java:102) 
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:760) 
at org.primefaces.component.autocomplete.AutoComplete.broadcast(AutoComplete.java:381) 
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:681) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:452) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:564) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1083) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:379) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1017) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:445) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:260) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:225) 
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:596) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:527) 
at java.lang.Thread.run(Thread.java:722) 

я мог бы найти Listening to onSelect events from Autocomplete (Primefaces) component отношение к моей проблеме, но нет атрибута selectlistener для primefaces автозаполнения в 3,5 релизе.

+0

@BalusC могли бы вы помочь мне с этим вопросом? – FiendFyre

+0

is 'listener =" analyzerFilterInput.handleSelect "' опечатка или это то, что вы действительно имеете в своем коде? Вы знаете, что у вас должно быть 'listener =" # {analyzerFilterInput.handleSelect} "правильно? – kolossus

+0

@kolossus Я попробовал с listener = "# {analyzerFilterInput.handleSelect}", но я все равно получаю ту же ошибку. – FiendFyre

ответ

3

Вы должны боба и область применения аннотаций для того, чтобы получить доступ к фасоли:

@ManagedBean 
@SessionScoped,@ViewScoped... 
-2

метод не найден. Потому что вы не вложили в фигурные скобки

listener="analyzerFilterInput.handleSelect" 

должен быть изменен на

listener="#{analyzerFilterInput.handleSelect}" 
+1

Это просто небрежность OP. OP работал в коде и закодировал код с копией, который не соответствовал сообщению об ошибке. Если бы на самом деле у ОП не было никаких фигурных скобок, тогда ОП не получил бы особого метода, который бы не нашел исключения вообще. – BalusC