Я вырыл вокруг SO, пытаясь решить эту проблему, и продолжаю находить свой путь назад к сообщению (которое, как мне кажется, не находит снова), где BalusC предоставил список вероятных проблем , но я уже реализовал решения, какие проблемы, похоже, они применили ко мне. Ситуация заключается в том, что внутри моего .xhtml-файла у меня есть команда Primefaces, пытающаяся вызвать поддерживающий метод Bean при установке некоторых свойств bean с помощью f: setPropertyActionListener. Однако метод bean никогда не вызван.p: commandButton не выполняет метод действия
Незначительная часть этой страницы, на которой я работаю, имеет кнопки в другом месте, используя почти идентичный код, и эти кнопки работают нормально.
Нажатие на эту кнопку обновляет страницу, но ничего больше. Некоторая релевантная информация: кнопка находится внутри ui: repeat, которая находится внутри другого ui: repeat, который находится внутри p: dataGrid. Все это содержится внутри формы h:. На странице есть два h: тега формы, однако они не вложены. Эта кнопка находится во второй форме. Кнопки в первой форме работают нормально. Бэк-бэк - ViewScoped.
Я работаю с JSF 2.X и Facelets, а также с использованием Primefaces. Мой сервер Apache Tomcat v7.0.47
Вот Действие Метод:
public final String selectAnswerForRequest() {
FacesContext fCtx = FacesContext.getCurrentInstance();
String navString = "";
try {
if (chosenAnswer != null && unansweredRequest != null && unansweredRequest.getResponse() != null) {
brain.handleResponse(unansweredRequest.getResponse(), chosenAnswer, unansweredRequest);
navString = "refresh";
}
} catch (BrainException e) {
LOGGER.error("Error adding answer", e);
fCtx.addMessage(null, buildErrorMessage("hdrFailed", "txtErrorAddingAnswer"));
}
return navString;
}
Все имеет методы получения и установки. Я попытался изменить атрибут action на actionListener и изменил метод действия, чтобы принять событие, но он все еще не работает. Я попытался изменить его с p: на h :. Я попытался сделать его commandLink и h: commandButton.
Edit: Вот это весь .xhtml документ в более очищенном виде:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
xmlns:encode="http://envisage.com/jsf/encode"
template="/templates/twocolumn.xhtml">
<ui:param name="pageTitle" value="#{msgHome['pageTitle']}" />
<ui:param name="pageId" value="pg-home" />
<ui:param name="pageDesc" value="#{msgHome['pageDesc']}" />
<ui:define name="columnOne">
<h2 class="section-title">
<span class="label label-warning label-icon"><i
class="eis-icon-recent"></i></span> #{msgHome['answeredTitle']}
</h2>
<div id="answered-questions" data-resize="trending-sidebar"
data-min-resize="200">
<h:form id="firstform" prependId="false">
<p:dataGrid paginatorPosition="bottom" var="req"
value="#{homeBean.answeredQuestions}" rows="5" columns="1"
paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
id="renderTarget1">
<p:column>
<section>
<div>
<dl>
<ui:repeat var="answer" value="#{req.response.answers}">
<div>
<p:commandButton update="@form, :growlForm:growl"
ajax="false" value="#{msgHome['highlyBtn']}"
action="#{homeBean.markAnswerAsHighlyUseful}">
<f:setPropertyActionListener
target="#{homeBean.selectedAnswer}" value="#{answer}" />
<f:setPropertyActionListener
target="#{homeBean.selectedRequest}" value="#{req}" />
</p:commandButton>
<p:commandButton update="@form, :growlForm:growl"
ajax="false" value="#{msgHome['somewhatBtn']}"
action="#{homeBean.markAnswerAsSomewhatUseful}">
<f:setPropertyActionListener
target="#{homeBean.selectedAnswer}" value="#{answer}" />
<f:setPropertyActionListener
target="#{homeBean.selectedRequest}" value="#{req}" />
</p:commandButton>
<p:commandButton update="@form, :growlForm:growl"
ajax="false" value="#{msgHome['notBtn']}"
action="#{homeBean.markAnswerAsNotUseful}">
<f:setPropertyActionListener
target="#{homeBean.selectedAnswer}" value="#{answer}" />
<f:setPropertyActionListener
target="#{homeBean.selectedRequest}" value="#{req}" />
</p:commandButton>
</div>
<p:separator />
</ui:repeat>
</dl>
</div>
</section>
</p:column>
</p:dataGrid>
</h:form>
</div>
<h2>
<span class="label label-danger label-icon"><i
class="eis-icon-question"></i></span> #{msgHome['unansweredTitle']}
</h2>
<div id="unanswered-questions" data-resize="moderators-sidebar"
data-min-resize="140">
<h:form id="secondForm" prependId="false">
<p:dataGrid paginatorPosition="bottom" var="unansweredReq"
value="#{homeBean.unansweredRequests}" rows="5" columns="1"
paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"
id="renderTarget2">
<p:column>
<section>
<div>
<dl>
<p:separator />
<ui:repeat var="match"
value="#{unansweredReq.matchingQuestions}">
<ui:repeat var="answers" value="#{match.answers}">
<div>
<p:commandButton update="@form, :growlForm:growl"
ajax="false" value="#{msgHome['acceptAnsBtn']}"
action="#{homeBean.selectAnswerForRequest}" execute="@this">
<f:setPropertyActionListener
target="#{homeBean.chosenAnswer}" value="#{answers}" />
<f:setPropertyActionListener
target="#{homeBean.unansweredRequest}"
value="#{unansweredReq}" />
</p:commandButton>
<p:commandButton update="@form, :growlForm:growl"
ajax="false" value="#{msgHome['removeAnsBtn']}"
action="#{homeBean.removeAnswerFromRequest}"
execute="@this">
<f:setPropertyActionListener
target="#{homeBean.chosenAnswer}" value="#{answers}" />
<f:setPropertyActionListener
target="#{homeBean.unansweredRequest}"
value="#{unansweredReq}" />
</p:commandButton>
</div>
<p:separator />
</ui:repeat>
</ui:repeat>
</dl>
</div>
</section>
</p:column>
</p:dataGrid>
</h:form>
</div>
<h:form id="growlForm">
<p:growl id="growl" showDetail="true" life="5000"
severity="info,warn,error" />
</h:form>
<h:messages />
</ui:define>
Edit 2: Самое последнее открытие было то, что после удаления верхней половины .xhtml документа (Вся первая h: форма), кнопки в нижней половине начали работать правильно. В настоящее время я пытаюсь использовать эти знания, чтобы узнать, где я могу получить.
Вы отправите полный <форму ... Часть вашего XHTML? Я имею в виду форму и весь код внутри него. –
Хорошо, сначала я не хотел, так как он несколько большой, я разместил половину, содержащую мои неработающие кнопки, а затем половину, содержащую рабочие кнопки. –
Просто скопируйте код в другой проект, а затем обрезайте как можно больше кода, удалив теги/атрибуты/etc, пока проблема все еще проявляется. Как только вы перейдете на этот шаг, проблема исчезнет, сделайте шаг назад, а затем скопируйте весь этот код здесь. Конечно, теги вроде '