• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

не запускается Action из Commandlink

  • Автор темы Gluk
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Gluk

.jsp страничка:
Код:
...
<h:commandLink action="#{myBean.gotoPage}">
<h:outputText value="#{myBean.name}"/>
<f:param name="nextPage" value="#{myBean.uri}"/>
</h:commandLink>
...

myBean.class :
Код:
...
public String gotoPage() {
System.out.println("Action executed...");
return "goto";
}
...

faces-config.xml:
Код:
<managed-bean>
<managed-bean-name>myBean</managed-bean-name>
<managed-bean-class>MyPackage.MyClass</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>

Во-о-о-т...

Ну, и при нажатии на ссылку (commandLink то бишь) TomCat как-то недобро мне отвечает:
Код:
message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 
javax.servlet.ServletException: Error calling action method of component with id _idJsp1:data:0:_idJsp7
javax.faces.webapp.FacesServlet.service(FacesServlet.java:152)

root cause 
javax.faces.FacesException: Error calling action method of component with id _idJsp1:data:0:_idJsp7
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:74)
javax.faces.component.UICommand.broadcast(UICommand.java:106)
javax.faces.component.UIData.broadcast(UIData.java:513)
javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:94)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:168)
org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:343)
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)

Сообщения "Action executed..." в логах нет.
Если заменить навигацию на статическую :
Код:
 <h:commandLink action="goto">
всё работает.

Так чем, собственно, плох мой изначальный вариант?!
 
G

Gluk

Так толком и не понял что было-то. Моя вина, что не указал всё, что ещё на страничке было! Но я не думал что там всё так взаимосвязано (тока начинаю писать на Java)!!! Короче, был ещё метод, который вызывался при обновлении страницы. Он каким-то образом блокировал запуск моего action'а. Изменил чуток Bean, добавил в commandLink свойство immediate="true"... Заработало! Методом тыка всё сделал. Если кто объяснит на будущее - буду благодарен.
А так, всё....
 
P

pasha Vitebsk

То, что у тебя заработал action при установке атрибута immdate="true" говорит о том, что для какого- то компонента на jsf-странице не выполнился процесс валидации или конвертации. Попробуй на jsf странице закомментировать другие тэги. Так найдешь ошибку.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!