2013-12-12 73 views
3

我努力發送一個Primefaces bean屬性到javascript直接爲了打開一個新頁面,並將bean屬性的內容寫入新頁面。Primefaces ajax回調參數爲javascript

我正在使用Primefaces 4.0。

我有這樣一個命令按鈕:

<p:commandButton id="buttonId" update="buttonId, otherComponentId" 
    value="press me" process="@this" actionListener="#{homeController.myMethod}" 
    oncomplete="handleComplete(xhr, status, args)"> 
</p:commandButton> 

在handleComplete的JavaScript函數參數是不確定的,但不是XHR和地位。 javascript函數的定義:

function handleComplete(xhr, status, args){ 
    var w = window.open(); 
    w.document.open(); 
    alert(xhr.responseText.substring(100)); 
    alert(status); 
    alert(args); 
    var d = '<head></head><body>'+ args.firstParam +'<body>'; 
    w.document.write(d); 
    w.document.close(); 
} 

第一警惕它給我的頁面,第二個語法錯誤, 和錯誤是:遺漏的類型錯誤:無法讀取的不確定

財產「firstParam」我要通過在ARGS一個字符串是這樣的:

public String MyMethod() { 
    RequestContext context = RequestContext.getCurrentInstance(); 
    context.addCallbackParam("firstParam", "my string"); 
     return ""; 
} 

args.firstParam訪問它在JavaScript。

方法被調用,(我有一些printscreens這項工作。)

我必須嘗試這種方式,而不是文本設置成

<h:outputText id="myText" escape="false" rendered="true" 
      value="#{homeController.property}" /> 

,然後得到這個元素的innerHTML因爲我將用innerHTML獲得的內容與bean中的字符串變量不同。這種方法有效,但不是我想要的。我想知道爲什麼args對象是未定義的,或者我怎麼才能從javascript處理bean屬性。謝謝。

回答

4

你應該確保你的方法被調用的第一件事。 如果調用正確,則進行一些日誌記錄或調試您的方法。

如果不是,您可能需要將流程屬性添加到按鈕 中,並將流程設置爲@this。

如果在這個階段你的方法被調用,那麼你的頁面上有一個驗證錯誤。

而且我會在actionListener中調用我的方法而不是實際操作,並將()放在最後。 Differences between action and actionListener

請嘗試以下

<p:commandButton id="buttonId" 
value="press me" actionListener="#{homeController.myMethod()}" 
process="@this" 
oncomplete="handleComplete(xhr, status, args)"> 
</p:commandButton> 

由於您的錯誤是「firstParam」是不確定的,而不是「ARGS」是不確定的,你可能想確保你的firstParam值不爲空!

+0

感謝您的幫助和快速回復。這是javascript函數中的錯誤Uncaught TypeError:無法讀取未定義的屬性'firstParam'。我將立即編輯帖子。 –

+0

我已經更新了我的答案,最後還有一條建議......讓我知道你有什麼... @MihaiSerban –

+0

你是對的,謝謝。如果我添加'context.addCallbackParam(「firstParam」,「hello world」);'它的工作參數,但如果我添加我的字符​​串它爲空,它會給出錯誤。我的字符串它實際上是一個靜態頁面..可能有一些大小限制?因爲我的字符串被打印出來,它不是空的,但是它非常大。 –