繁体   English   中英

将JS变量传递给Java类

[英]passing JS variable to a java class

我正在做一个公交路线规划项目,我需要使用Google Maps来确定车站和车站,我用JavaScript从Google Maps中获取坐标,现在我需要将这些坐标传递给Java类,在其中我可以这些坐标上的不同过程。 我在Netbeans上使用JSF -Java服务器Faces-。 谁能帮助我将这些坐标传递给.java类? 提前致谢

有很多框架可以帮助您。 例如,Primefaces在其新的JSF实现中内置了一个google maps插件( http://www.primefaces.org/showcase-labs/ui/gmapHome.jsf )。 手工操作也很容易。 只需设置一个Servlet来处理GET请求并使用您想将数据发送到Servlet的任何Ajax方法。 我将从寻找一些Servlet和Ajax示例开始。 同样,根据您使用的JSF实施方式,可能已经内置了Ajax工具。

祝你好运。

分享并享受。

  1. 使用隐藏的输入<h:inputHidden value="#{bean.value}"/>
  2. 使用javascript更新其值。
  3. 处理<h:inputHidden value="#{bean.value}"/>以更新其bean值。

这是一个工作示例:

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

@ManagedBean
@ViewScoped
public class Bean {

    private String value;

    @PostConstruct
    public void postConstruct() {
        value = "SERVER SIDE VALUE";
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

}
<h:head>
    <script>
        function updateElementValue(id,value){
            document.getElementById(id).value = value;
        }
    </script>
</h:head>

<h:body>

    <h:form id="form" prependId="false">

        <p:commandButton value="UPDATE CLIENT SIDE VALUE OF INPUT-HIDDEN"
                         onclick="updateElementValue('nameInputHiddenId',
                                                     'CLIENT SIDE VALUE');
                                                      return false;"/>
        <p:commandButton value="UPDATE SERVER SIDE VALUE OF INPUT-HIDDEN" 
                         process="@form" 
                         update="dialogId" 
                         oncomplete="dialogWidgetVar.show();" />

        <h:inputHidden id="nameInputHiddenId" value="#{bean.value}" />

        <p:dialog id="dialogId" widgetVar="dialogWidgetVar">
            <h:outputText id="nameOutputTextId" value="#{bean.value}" />
            <p:commandButton value="Yes" onclick="dialogWidgetVar.hide();" />
            <p:commandButton value="No" onclick="dialogWidgetVar.hide();"/>
        </p:dialog>

    </h:form>

</h:body>

您可以使用<a4j:jsFunction>javascript值传递给托管bean。 这是一个例子。

这是你的js数组

<script>
  var coordinateArray = [12, 26];
</script>

这是您的页面。 请注意, sendData是您的jsFunction的名称, coordinateArray.join()会将数组转换为String。

   <h:form>
    <a4j:commandButton value="Send" onclick="sendData(coordinateArray.join())"/>
    <a4j:jsFunction name="sendData">
      <a4j:actionparam name="param1" assignTo="#{hBean.coordinatesString}" />
    </a4j:jsFunction>
   </h:form>

在您管理的Bean中

  String coordinatesString;
  String[] coordinatesArray;

  public String getCoordinatesString() {
    return coordinatesString;
  }

  public void setCoordinatesString(String coordinatesString) {
    this.coordinatesString = coordinatesString;
    this.coordinatesArray = coordinatesString.split(",");//This is what you need
  }

编辑:


可以将a4j:jsFunction视为普通的javascript函数。您可以像上面的示例一样在其中放置一个actionParam 如果是这样,则意味着jsFunction有一个参数(类似于普通的javascript函数参数)。 您给jsFunction一个名称,然后像普通的javascript函数(即funcName() )一样使用给定的名称进行调用。 如果其中有一个actionparam ,则在调用它时应该传递一个参数(即funcName(value) )。
<h:form>不一定必须围绕它。 但是,如果要在click commandButton时调用它,则该按钮应该在表单内。
正如您在评论中所说,如果坐标数组的名称是path则可以像上面那样调用上面的jsFunction sendData(path.join()) 您无需在jsFunction添加任何javascript代码。 您只需像调用普通javascript函数一样,从javascript代码中调用jsFunction

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM