2013-08-09 4 views
2

У меня есть страница с вызовом 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); 
     } 
    } 
} 
+0

Переместить '# {bean.save}' вызова метода в качестве действия вашего '<ч: CommandButton>' и удалить все в '' , оставьте его в чистоте. –

+0

Я сделал, и ничего не изменилось. Единственное, что выполняется, это вызов метода preRendered, и снова этот метод не завершен. У регистратора есть «Старт» и «Конец» метода Build(). Все, что я получаю, это «Пуск», но «Конец» нет. – Nacho321

+0

Измените свой вопрос и предоставите [SSCCE] (http://sscce.org) свою проблему для дальнейшего анализа. –

ответ

2

Это работало для меня. «Показать» - это логическое значение, которое вы можете установить при успешном сохранении.

  <h:commandButton id="ajax" value="Save" action="{agreement.save}" > 
          <f:ajax execute="@form" render="@form" /> 
       </h:commandButton> 
      <h:outputScript rendered="#{agreement.show}">alert("save");</h:outputScript> 
Смежные вопросы