【问题标题】:Using ajax with JSF [duplicate]在 JSF 中使用 ajax [重复]
【发布时间】:2017-06-06 01:08:54
【问题描述】:

在 JSF 中使用 ajax 时遇到了一些问题。 事实上,我正在尝试我要做的事情很简单,但我无法弄清楚。 我有返回字符串的方法,并且我只想在单击按钮时打印此字符串。这个方法需要 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>

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

【问题讨论】:

    标签: ajax jsf


    【解决方案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 事件中,您必须明确指定要刷新/渲染的组件(如果您不同意的话):

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

    【讨论】:

    • 谢谢回答,但我仍然有同样的问题。我编辑了我的代码,也许我做错了什么?
    • style="display:none" .. 没有引号
    • 好的,我已经将输出包装在一个 panelGroup 中,并开始显示/隐藏面板本身。试试看
    • 这不是一个小技巧吗?此示例播放 css 属性,这仅隐藏和显示 outPutText 的内容。在单击按钮之前,我不希望执行 cSVobjectCtrl.getJson(48.866667, 2.33333)。但也许这是不可能的?
    • 好的,在这种情况下让我尝试另一个测试
    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 2017-12-15
    • 2020-06-28
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2017-02-10
    • 2011-03-09
    相关资源
    最近更新 更多