0

我有一个使用 primeFaces 的 JSF 站点。我无法使用 P:RemoreCommand 从我的 javascript 获取任何参数到我的 bean。这是我的代码:

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,两者都有相同的结果。

4

2 回答 2

0

问题是您使用了错误的格式。您必须使用带有“名称”和“值”的 JS 对象数组。IE[{"name":"param1","value":"value1"},...]

在您的情况下,更改scaleLineto的参数[{"name":"newZoom","value":"10"}]应该可以解决问题。此外,您应该将 JS 对象中的键括起来"",否则它不是有效的 JSON。

于 2013-07-16T10:01:07.397 回答
-1

你能在这样[]的参数周围加上方括号吗?另外请确保它在. 如果它不起作用,因为我很长时间没有使用primefaces并且自从我上次使用以来发生了很多变化,你可以使用传统的方式来沟通js和backbean。即拥有1个文本字段和1个按钮的隐藏形式,并使用jquery/js将值填充到文本字段的值。此文本字段应将其值绑定到bean 中的变量。然后使用 jquery/js 单击将触发方法的命令按钮。如果您不必将文本字段绑定到 bean 上的变量,您仍然可以从 requestParameterMap 获取值。scaleLines()scaleLines([{newZoom:'10'}])remoteCommandh:form10newZoomscaleLines10

于 2013-07-16T04:30:19.253 回答