2013-07-15 75 views
0

我有一個使用primeFaces的JSF站點。我無法使用P:RemoreCommand從我的javascript中獲取任何參數給我的bean。這裏是我的代碼:無法使用primefaces將參數從JavaScript傳遞給JSF Bean RemoteCommand

XHTML:

<p:remoteCommand name="scaleLines" actionListener="#{mapBean2.scaleLines}" update="mapPanel"/> 

再後來稱之爲:

map.on('viewreset', function(){ 
      scaleLines({newZoom:'10'}); 


      }); 

會話範圍ManagedBean:

public void scaleLines(){ 

    String newZoom = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("newZoom"); 

    if(newZoom == null){ 
     Logger.getAnonymousLogger().info("Zoom level is null"); 
    } 
    else{ 
    Integer newZoomInt = Integer.parseInt(newZoom); 
    this.mapzoomLevel = newZoomInt; 
    for(ZsyMap1Linetest line : allTestLines){ 
     line.setWeight(((line.getWeight()*newZoomInt)/(6))); 
    } 
    } 
} 

這並調用該方法,但是當我附加了一個調試器,我可以看到newZoom始終爲空,意味着該參數不會被傳遞。我有閱讀其他帖子,我不明白爲什麼它不會通過。我也嘗試過使用JSF managedBean作爲支持bean和一個名爲bean的CDI,bOth具有相同的結果。

回答

0

問題是您使用的格式不正確。您必須使用具有「名稱」和「值」的JS對象數組。即[{"name":"param1","value":"value1"},...]

在你的情況下,將scaleLine的參數更改爲[{"name":"newZoom","value":"10"}]應該有所斬斷。另外,你應該用""圍繞JS對象中的鍵,否則它不是有效的JSON。

+0

我正在使用LeafletJS。當按照建議圍繞在雙引號中時,JavaScript會引發錯誤TypeError:t.addLayer不是函數。我嘗試用單引號括起來:'scaleLines({'name':'newZoom','value':'10'});'。這產生了和以前相同的結果:Bean方法被調用,但NewZoom爲null。 – Rhino

+0

其實我從上面的評論中注意到我已經省略了括號。這似乎工作'scaleLines([{'name':'newZoom','value':'10'}]);'' – Rhino

-1

你能把方括號[]圍繞參數scaleLines()這樣的scaleLines([{newZoom:'10'}])嗎?請確保remoteCommand位於h:form之內。如果它不起作用,因爲我長時間沒有使用primeface,並且自從我上次使用以來已經發生了很多變化,您可以使用傳統方式來交流js和backbean。這是一個隱藏的1個文本字段和1個按鈕,並使用jquery/js將值10填充爲文本字段的值。此文本字段應將其值綁定到您的bean中的變量newZoom。然後使用jquery/js來點擊將觸發scaleLines方法的命令按鈕。如果您不必將文本字段綁定到bean上的變量,則仍然可以從requestParameterMap獲取值10

相關問題