首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ajax与CommandButton

Ajax与CommandButton
EN

Stack Overflow用户
提问于 2013-08-09 19:28:52
回答 1查看 20.4K关注 0票数 3

我有一个页面,它有一个preRender调用,准备在页面中显示所有内容。我不确定它是否相关,但是页面会收到一些来自经验之前的index.xhtml的平行线。

我有一个commandButton,需要执行服务器端方法(准确地说,是更新)。不需要刷新页面。

所以我要用ajax。这是按钮的密码

代码语言:javascript
复制
<h:commandButton value="Save">
    <f:ajax event="click" listener="#{bean.save}"/>
</h:commandButton>

到目前为止,在java端,下面是bean的保存方法

代码语言:javascript
复制
public void save(){
    log.debug("Save executed!");
}

我添加了一些日志来检查正在执行的是什么。当我单击按钮时,唯一会发生的事情是执行preRender方法(而不是全部,只是其中的一部分)。其他什么都不会发生。在视觉上,页面没有刷新或其他任何内容。

我怀疑当我单击该按钮时,页面将被刷新,因此将执行preRender方法(称为Build()),但是由于没有参数(请记住,构建需要通过<f:param>传递的参数),所以会出现错误。

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

想法?

-编辑--

INDEX.XHTML

代码语言:javascript
复制
<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

代码语言:javascript
复制
    <!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

代码语言:javascript
复制
@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);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-08-12 20:30:00

“显示”是一种布尔值,您可以在成功保存时设置该布尔值。

代码语言:javascript
复制
          <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>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18154255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档