У меня есть страница с вызовом preRender, который подготавливает все, что будет отображаться на странице. Я не уверен, что это актуально, но страница получает несколько параметров из index.xhtml, который предшествует опыту.Ajax с CommandButton
У меня есть commandButton, что мне нужно выполнить метод на стороне сервера (если быть точным, обновление). Нет необходимости обновлять страницу.
Так что я использую ajax. Вот кнопки он, код
<h:commandButton value="Save">
<f:ajax event="click" listener="#{bean.save}"/>
</h:commandButton>
До сих пор на стороне Java, вот бина метод сохранения
public void save(){
log.debug("Save executed!");
}
Я добавил некоторые протоколирование, чтобы проверить, что выполняется. Когда я нажимаю кнопку, происходит только то, что выполняется метод preRender (а не полностью, только часть его). Больше ничего не происходит. Визуально страница не обновляется и ничего.
Я подозреваю, что, когда я нажимаю кнопку, страница обновляется, и поэтому выполняется метод preRender (называемый Build()), но поскольку нет параметров (помните, что для сборки требуются параметры, прошедшие через <f:param>
) , что-то не получается.
Нижняя строка: мне просто нужно выполнить метод сохранения при нажатии кнопки без обновления или перенаправления чего-либо.
Идеи?
--EDIT--
index.xhtml
<html 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:c="http://java.sun.com/jstl/core">
<ui:define name="body">
<h:link outcome="agreementDetail.xhtml" value="EA-15558">
<f:param name="serviceId" value="EA-15558" />
<f:param name="site" value="NIC" />
</h:link>
</ui:define>
</html>
AgreementDetail.XHTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html 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:c="http://java.sun.com/jstl/core">
<f:view>
<f:event type="preRenderView" listener="#{agreement.build}"/>
</f:view>
<ui:define name="body">
<f:view>
<h:form>
<h:commandButton value="Save" action="#{agreement.save}">
<f:ajax/>
</h:commandButton><br/><br/>
<h:dataTable value="#{agreement.licenseServerNames}" var="licenseServerName">
<h:column>
<h:inputText value="#{licenseServerName}"/>
</h:column>
</h:dataTable>
</h:form>
</f:view>
</ui:define>
</html>
AgreementBean.java
@ManagedBean(name="agreement")
@RequestScoped
public class AgreementBean {
@ManagedProperty("#{param.serviceId}")
private String serviceId;
@ManagedProperty("#{param.site}")
private String site;
private List<String> licenseServerNames; //GETTERS AND SETTERS OMITTED TO AVOID EXCESS CODE
@PostConstruct
public void build(){
logger.debug("START");
methodOne();
logger.debug("END");
}
public void save(){
logger.debug("SAVE!!!!!");
for(String name : licenseServerNames){
logger.debug("Servername = "+name);
}
}
}
Переместить '# {bean.save}' вызова метода в качестве действия вашего '<ч: CommandButton>' и удалить все в '', оставьте его в чистоте. –
Я сделал, и ничего не изменилось. Единственное, что выполняется, это вызов метода preRendered, и снова этот метод не завершен. У регистратора есть «Старт» и «Конец» метода Build(). Все, что я получаю, это «Пуск», но «Конец» нет. – Nacho321
Измените свой вопрос и предоставите [SSCCE] (http://sscce.org) свою проблему для дальнейшего анализа. –