Используя JSF 2.0 и EL, я пытаюсь вызвать метод в POJO, который является атрибутом bean-объекта видимости. Код на самом деле очень похож на учебник @ BalusC здесь . Когда я вызываю метод, который не принимает аргументов, все нормально. Но когда я пытаюсь вызвать метод, который принимает аргумент, я получаю следующее исключение:
javax.faces.el.MethodNotFoundException: javax.el.MethodNotFoundException:
/user.xhtml at line 42 and column 32 action="#{users.user.removeFriend(friend)}":
Method not found: model.User@67f2b0dd.removeFriend()
Вот еще несколько деталей:
user.xhtml
<f:metadata>
<f:viewParam name="id" value="#{users.id}" />
<f:event type="preRenderView" listener="#{users.init}" />
</f:metadata>
...
<h:form id="usersForm">
<p:outputPanel>
<p:dataTable id="userTable" value="#{users.user.friendList}" var="friend">
<p:column>
<h:outputText value="#{friend.name}" />
</p:column>
<p:column>
<p:commandButton action="#{users.user.removeFriend(friend)}"
ajax="true"
update="userTable somethingElse" process="@this"
onerror="errorDialog.show();"
icon="ui-icon-delete"
title="delete user">
</p:commandButton>
</p:column>
</p:dataTable>
</p:outputPanel>
<p:commandButton action="#{users.user.removeAllFriends()}" ajax="true"
update="userTable somethingElse"
process="@this"
icon="ui-icon-close"
value="delete all friends?">
</p:commandButton>
</h:form>
У меня есть следующий ViewScoped
bean:
Users.java
@ManagedBean(name = "users")
@ViewScoped
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private User user;
@ManagedProperty("#{userService}")
private UserService userService; // session scoped
public void init() {
user = userService.getCart(id);
}
public final String getId() {
return id;
}
public final void setId(String id) {
this.id= id;
}
public final User getUser() {
return user;
}
public final void setUser(User user) {
this.user= user;
}
public final void setUserService(UserService userService) {
this.userService = userService;
}
}
Класс User
- POJO - имеет атрибут private List<Friend> friends
, с методами получения и установки и метод public
User#removeFriend(Friend f)
. У него есть другой метод public
; User#removeAllFriends()
.
Страница отображается нормально, но я получаю исключение, когда нажимаю кнопку «Удалить» рядом с пользователем в таблице.
Что здесь не так? Почему я могу успешно вызвать метод без параметров, но не могу передать аргументы другому?
Редактировать: Приложение развернуто на Tomcat 7.0, если это хорошо.
Любая помощь приветствуется.
Обновление: Как указали BalusC и Neo, это проблема с Tomcat 7.0. Я установил WebLogic 12.1 и все заработало.