我在使用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>
但问题仍然存在。在单击按钮之前显示字符串。
答案 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。