2014-02-10 61 views
1

我試着寫在bean的方法JavaScript代碼後臺bean的方法。我在這個應用程序啓動中取得了成功。不能從JavaScript調用

當我運行我的應用程序,js的函數調用Bean方法和返回值,但是當我點擊按鈕,它永遠不會再次調用。我的意思是,它只在應用程序啓動時調用bean方法。 我的按鈕是:

<p:commandLink oncomplete="myRemote();" title="my button" 
       /> 

我的JavaScript函數爲:

function myRemote() { 
${myBackingBean.actionMyValues()} 

} 

我Bean是:

@Controller 
@Scope("view") 
public class MyBackingBean implements Serializable { 


public String actionMyValues() { 

    String js=""; 
    /*getting some values from database and adding it to javascript variables.*/ 
    js += "alert('alert')";// 
    return js; 
} 
} 
+1

的問題是不清楚我,但你爲什麼不考慮使用號碼:remoteCommand? –

+0

我的設計就像在客戶端以字符串形式寫入JavaScript代碼並將其傳遞給客戶端。當應用程序運行時,此工作一次。但是,如果我嘗試使用按鈕單擊操作,則javascript函數的內容不會更改。 Js函數不調用bean方法,因此它不會獲取字符串的新內容。 –

回答

-1

如果你想調用JS從支持bean可以使用org.primefaces.context.RequestContext類:

String js=""; 
/*getting some values from database and adding it to javascript variables.*/ 
js += "alert('alert')"; 
RequestContext.getCurrentInstance().execute("js"); 

編輯

因爲已經在評論中有人建議,你也可以使用一個p:remoteCommandhttps://www.primefaces.org/showcase/ui/ajax/remoteCommand.xhtml

遠程命令將取代您的自定義JS功能:

<p:commandButton value="My button" type="button" onclick="myRemote()" id="btnRemote" /> 

<p:remoteCommand name="myRemote" actionListener="#{myBackingBean.actionMyValues()}"/> 

然後,如果你需要從你的bean中調用JS,你仍然需要使用RequestContext

+0

據我所見,問題是另一種方式,從JS調用服務器端方法。 –

+0

事實上,在建議的代碼中,從服務器端執行JS的部分是錯誤的。我做了和編輯,一個更好的解決辦法是更換的p整件事:remoteCommand通過哈特姆 – phoenix7360

+0

的建議如何我可以在我的問題remotecommand使用? –