我有一个页面,其中有一个preRender调用,用于准备要在页面中显示的所有内容。我不确定它是否相关,但是页面从经验之前的index.xhtml中获得了一些参数。
我有一个commandButton,我需要执行服务器端方法(确切地说是更新)。页面上无需刷新。
所以我正在使用ajax。这是按钮的代码
<h:commandButton value="Save">
<f:ajax event="click" listener="#{bean.save}"/>
</h:commandButton>
到目前为止,在java方面,这是bean的save方法
public void save(){
log.debug("Save executed!");
}
我添加了一些日志记录来检查正在执行的内容。当我单击按钮时,唯一发生的事情是执行preRender方法(而不是完全,只是其中的一部分)。没有其他事情发生。在视觉上,页面没有刷新或任何东西。
我怀疑当我点击按钮时,页面正在刷新,因此,preRender方法(称为Build())被执行,但由于没有参数(请记住Build需要参数传递{{1一些错误。
底线:我只需要在单击按钮时执行save方法而不刷新或重定向任何内容。
想法?
- 编辑 -
的index.xhtml
<f:param>
AgreementDetail.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>
AgreementBean.java
<!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>
答案 0 :(得分:2)
这对我有用。“Show”是一个布尔值,你可以在成功保存时设置。
<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>