2013-11-02 2 views
0

Я пытался реализовать командную кнопку с f:ajax и f:param в моем проекте, но я не успеваю.CommandButton не работает с Ajax и Param - JSF 2.0

У меня есть один Бин под названием «disciplinaMBean», у которого есть @SessionScoped. В соответствующем JSF (скажем, index.xhtml) у меня есть один p:dataTable, показывающий некоторые дисциплины (это то, что «дисциплина» означает на английском языке: P). Когда я нажимаю одну строку, открывается модальный режим, показывающий пользовательские параметры для «редактирования» или «удаления» дисциплины. Выбранный объект хранится в «disciplinaSelecionada» на selection атрибут Primefaces dataTable. Смотрите сами:

"Nome" means Name. "Salvar" means Save and "Excluir" means delete

код этого модального находится внутри файла "edit.xhtml". Смотрите код ниже:

<h:form> 
    <label for="nome">Nome:</label> 
    <h:inputText styleClass="form-control adicionar" id="nome" 
      value="#{disciplinaMBean.disciplinaSelecionada.nome}"> 
    </h:inputText> 

     <h:commandButton id="excluir" styleClass="btn btn-md btn-danger pull-left" value="Excluir" > 
     <f:param name="idDisciplina" value="#{disciplinaSelecionada.id}" /> 
      <f:ajax event="click" listener="#{disciplinaMBean.deletar}" /> 
    </h:commandButton> 
</h:form> 

и метод «Deletar» (средство удаления) в disciplineMBean:

public void deletar(){ 
    String param1 = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("idDisciplina"); 
    System.out.println("Disciplina deletada: " + param1); 
    int idDisciplina = Integer.parseInt(param1); 
    controleDisciplina.remover(idDisciplina); 
} 

Я знаю, что называется метод, потому что журнал консоли, но я могу» t удалить дисциплину, потому что у меня есть одна ошибка (пустая строка хранится в параметре idDisciplina).


Ниже ошибка:

Disciplina deletada: 
Nov 01, 2013 10:26:31 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute 
WARNING: /edit.xhtml @31,72 listener="#{disciplinaMBean.deletar}": java.lang.NumberFormatException: For input string: "" 
javax.el.ELException: /edit.xhtml @31,72 listener="#{disciplinaMBean.deletar}": java.lang.NumberFormatException: For input string: "" 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111) 
    at com.sun.faces.facelets.tag.jsf.core.AjaxBehaviorListenerImpl.processAjaxBehavior(AjaxHandler.java:447) 
    at javax.faces.event.AjaxBehaviorEvent.processListener(AjaxBehaviorEvent.java:113) 
    at javax.faces.component.behavior.BehaviorBase.broadcast(BehaviorBase.java:106) 
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:760) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:300) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:791) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1256) 
    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.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:724) 
Caused by: java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:592) 
    at java.lang.Integer.parseInt(Integer.java:615) 
    at mbeans.DisciplinaMBean.deletar(DisciplinaMBean.java:143) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:491) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:262) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    ... 27 more 

Что я могу сделать, чтобы решить эту проблему?

ответ

1

Если у вас есть EL 2.2, вы можете сделать это следующим образом (предполагается, что disciplinaSelecionada.id является int)

<h:commandButton id="excluir" action="#{disciplinaMBean.deletar(disciplinaSelecionada.id)}" styleClass="btn btn-md btn-danger pull-left" value="Excluir" /> 

....

public void deletar(int idDisciplina) 
{ 
    System.out.println("Disciplina deletada: " + idDisciplina); 
    controleDisciplina.remover(idDisciplina); 
} 
+0

Спасибо, но, извините ... что Е.Л. 2,2? – Paladini

+0

Мой учитель говорит мне, что JSF не может получить параметр и должен вернуть строку, он не прав? – Paladini

+0

@ FernandoPaladini могу спросить, какую ОС вы используете? Мне нравится –

Смежные вопросы