将JS变量传递给java类

时间:2012-11-30 21:18:30

标签: java javascript jsf jsf-1.2

我正在制作一个公交路线项目,我需要谷歌地图来固定站点和站点,,,我从JavaScript中获取谷歌地图的坐标,现在我需要将这些坐标传递给一个java类,其中我可以在这些坐标上进行不同的处理。我在netbeans上使用JSF -Java服务器面。任何人都可以帮助我将这些坐标传递给.java类吗? 提前致谢

3 个答案:

答案 0 :(得分:1)

有许多框架可以帮助您解决这个问题。例如,Primefaces有一个内置于他们的新JSF实现(http://www.primefaces.org/showcase-labs/ui/gmapHome.jsf)的谷歌地图插件。手工完成也很容易。只需设置一个Servlet来处理GET请求,并使用您希望将数据发送到Servlet的任何Ajax方法。我首先寻找一些Servlet和Ajax示例。同样,根据您正在使用的JSF的实现,可能已经内置了Ajax工具。

祝你好运。

分享并享受。

答案 1 :(得分:0)

  1. 使用隐藏的输入<h:inputHidden value="#{bean.value}"/>
  2. 使用javascript更新其值。
  3. 处理<h:inputHidden value="#{bean.value}"/>以更新其bean值。
  4. 这是一个有效的例子:

    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>
    

答案 2 :(得分:0)

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

这是您的js数组

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

这是你的页面。请注意,sendDatajsFunction的名称,coordinateArray.join()将数组转换为字符串。

   <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,那么您可以像这样调用上面的jsFunctionsendData(path.join())。您不会在javascript中添加任何jsFunction代码。 只需在调用普通jsFunction功能时,就可以通过javascript代码拨打javascript