Action bean не вызывается

Вопрос:

У меня проблема с JSF 2.0. Командная кнопка не вызывает bean-компонент, я уже прочитал команду balusc answerButton/commandLink/ajax action/listener, которая не вызывается, или вводимое значение не обновляется, но я не думаю, что сталкиваюсь с этими случаями, это код Я использую:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jstl/core">


....

<ui:repeat var="skill" value="#{skillsView.skills}">
<h:form>


<h:commandButton value="#{skill}"
action="#{skillsController.removeSkillFromPublication}"  ajax="true">
<f:param name="theskill" value="#{skill}" />
</h:commandButton>


</h:form>
</ui:repeat>

</ui:composition>

ОБНОВЛЕНИЕ 1:

это мой контроллер

@Controller
@Scope(value = WebApplicationContext.SCOPE_REQUEST)
public class SkillsController extends BController {

private static final Logger logger = LoggerFactory
.getLogger(SkillsController.class);

public void removeSkillFromPublication() {
logger.info("Deleting : " + getParameter("theskill"));
publicationService.removeSkillFromPublication(publicationDetailView
.getPublicationFullView().getId(), getParameter("theskill"));
skillsView.setSkills(publicationService
.getSkillsFromPublication(publicationDetailView
.getPublicationFullView().getId()));
}



}

я не получаю регистратор, ни одна задача не выполняется, я уже тестировался с помощью actionlistner с контроллером с actionevent и этой дополнительной работой

ОБНОВЛЕНИЕ 2:

Он работает с изменением SCOPE навыковView To WebApplicationContext.SCOPE_SESSION, кто-нибудь знает почему? !!

@Controller
@Scope(value = WebApplicationContext.SCOPE_SESSION)
public class SkillsView {

List<String> skills;
private String currentSkill;


public List<String> getSkills() {
return skills;
}
public void setSkills(List<String> skills) {
this.skills = skills;
}
public String getCurrentSkill() {
return currentSkill;
}
public void setCurrentSkill(String currentSkill) {
this.currentSkill = currentSkill;
}

Ответ №1

h:commandButton атрибут action требует, чтобы возвращать строку

Взятый из jsf-toolbox:

действие
Атрибут action принимает выражение привязки метода для метода действия компонента подстановки для вызова, когда этот компонент активируется пользователем. Метод действия должен быть открытым методом без параметров, который возвращает строку. Возвращаемая строка представляет собой логический результат действия (например, “успех”, “отказ” и т.д.) И используется инфраструктурой JavaServer Faces MVC для определения того, какой вид отображать следующий. [смелый от меня]

Вместо этого используйте свойство actionListener:

<h:commandButton actionListener="${skillsController.removeSkillFromPublication()}" ajax="true">
<f:param name="theskill" value="#{skill}" />
</h:commandButton>

Имейте в виду, что вам придется изменить сигнатуру метода, чтобы иметь параметр ActionEvent:

public void removeSkillFromPublication(ActionEvent e) {
//...

См. Панель инструментов:

ActionListener
Атрибут actionListener принимает выражение привязки метода для метода прослушивания бэка-компонента, который будет уведомлен, когда этот компонент будет активирован пользователем. Метод прослушивателя действий должен быть общедоступным методом с параметром ActionEvent и типом возврата void.


В качестве альтернативы вы можете removeSkillFromPublication() файл removeSkillFromPublication() String. Но здесь это неправильный подход.

Оцените статью
TechArks.Ru
Добавить комментарий