gpt4 book ai didi

jsf - 使用命令按钮的 Ajax

转载 作者:行者123 更新时间:2023-12-01 16:43:33 25 4
gpt4 key购买 nike

<分区>

我有一个页面有一个 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 需要通过 <f:param> 传递参数) ), 出问题了。

底线:我只需要在单击按钮时执行保存方法而不刷新或重定向任何内容。

想法?

--编辑--

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);
}
}
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com