2013-07-15 73 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

相关问题