在JSF中使用ajax

时间:2017-01-20 23:17:23

标签: ajax jsf

我在使用JSF的ajax时遇到了一些麻烦。 事实上,我尝试做的事情很简单,但我无法弄明白。 我有返回String的方法,我只想在单击按钮时打印此String。这个方法需要2个参数,我想传递给2个inputBox的方法。 这里我提供的代码到目前为止还没有完成,如果我做得好的话,我也不会这样做:

<h:commandButton id="submit" value="Submit"> 
            <f:ajax event="click" />
        </h:commandButton>
        <h:outputText id="result" value="#{cSVobjectCtrl.getJson(48.866667, 2.33333)}" />

这段代码的问题是我在点击按钮之前直接得到了字符串。我应该改变什么来使这段代码按照我想要的方式工作。

编辑1:

<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
    <h:head>
        <title>JsonValue</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
       <script>
         var show = function(){
         document.getElementById('result').style.display = 'block';
        }
        </script>
    </h:head>

    <h:form>


        <h:commandButton id="submit" value="Submit" onclick="show();" > 
     <f:ajax event="click" render="result"/>
</h:commandButton>
<h:outputText id="result" value="#{cSVobjectCtrl.getJson(48.866667, 2.33333)}" 
              style="display:'none'"/>

    </h:form>


</html>

但问题仍然存在。在单击按钮之前显示字符串。

1 个答案:

答案 0 :(得分:1)

这是对我有用的解决方案:

JSF页面

<h:commandButton id="submit" value="Submit">
        <f:ajax event="click" render="resultGroup" listener="#{cSVobjectCtrl.doRender}"/>
</h:commandButton>

<h:panelGroup id = "resultGroup" layout="block" >
    <h:panelGroup rendered="#{cSVobjectCtrl.rendered}">
         <h:outputText id="result" value="#{cSVobjectCtrl.getJson(48.866667, 2.33333)}}" />
    </h:panelGroup>
</h:panelGroup>

支持Bean

@ManagedBean
@ViewScoped // this is important
public class CSVobjectCtrl{

   private boolean rendered = false;

   public boolean isRendered() {
        return rendered;
    }

    public void setRendered(boolean rendered) {
        this.rendered = rendered;
    }

    public void doRender(AjaxBehaviorEvent event){
        rendered = true;
    }
}

另一方面,在ajax事件中你必须明确指定要刷新/渲染的组件(如果你什么都不是):

  

渲染 - 评估收藏。将成为的组件的clientIds   参与请求处理的“呈现”部分   生命周期。如果指定了文字,则标识符必须为空格   分隔。任何关键字“@this”,“@ form”,“@ all”,“@ none”都可以   在标识符列表中指定。如果未指定,则为默认值   假设“@none”的值。例如,@ this clientIdOne   clientIdTwo。