2014-01-28 91 views
0
<h:form prependId="false" id="vt_sel_form"> 
     <p:panelGrid styleClass="center" columns="2">      
         <p:commandButton value="GO" oncomplete="alert(#{test.i})" actionListener="#{test.testfxn()}" update="@this"/> 
     </p:panelGrid> 
    </h:form> 

import java.io.Serializable; 
    import javax.faces.bean.ManagedBean; 
    import javax.faces.bean.ViewScoped; 

    @ViewScoped 
    @ManagedBean(name = "test") 

    public class TestClass implements Serializable { 

     int i ; 

     public int getI() { 
      return i; 
     } 

     public void setI(int i) { 
      this.i = i; 
     } 

     public void testfxn() {   
      setI(i++); 
      //i=i+10; 
      System.out.println("i" + i); 
     } 
    } 

这里,警报(#{} test.i)始终显示为0。我该如何支持bean值当我单击命令改变。 当我点击按钮两次,它就起作用。它用于当我使用a4j:commandButton罚款。使用辅助bean值在JavaScript

回答

1

这是因为alert(#{test.i});是在命令按钮被呈现时被评估的

<h:commandButton value="click me" action="#{testClass.testfxn()}"> 
    <f:ajax render="out" /> 
</h:commandButton> 
<h:panelGroup id="out"> 
    <h:outputScript> 
     alert(#{testClass.i}); 
    </h:outputScript> 
</h:panelGroup> 
+0

我已经使用的onComplete。这还不够吗? – kinkajou

+0

渲染视图时渲染'oncomplete'。那是你测试'#{test.i}'的时间。当ajax请求结束时它不会被更新。所以你需要告诉JSF把你更新后的'i'放在某个地方(也许让它呈现一个你可以从'oncomplete'函数中读取的隐藏输入)。 – mabi

+0

如何实时更改。我用richfaces做了这个工作正常。然后当我用primefaces完成它没有工作。 – kinkajou

0

与RichFaces的,您可以直接调用javascript函数,primefaces你需要有JavaScript函数为:

function_name(xhr, status, args),你可以告诉JSF渲染再次脚本看到变化值

使用列出命令按钮如实施例:

<p:commandButton value="GO" oncomplete="alert(#{test.i})" actionListener="#{test.testfxn()}" update="@this"/> 

在功能test.testfxn(),我们有:

public void testfxn(){  
RequestContext reqCtx = RequestContext.getCurrentInstance(); 
     i = i++; 
     reqCtx.addCallbackParam("i", i); 
} 

这里,在函数调用的ActionListener自变量添加到RequestContext的后台bean。

现在在javascript函数:

function draw(xhr, status, args) { 
    console.log("We are into draw function"); 
    jsonString = JSON.parse(args.i); //json variable is taken out from args variable. 
    console.log("The value of i "+ i); 
}