【问题标题】:passing JS variable to a java class将 JS 变量传递给 java 类
【发布时间】:2012-11-19 03:39:36
【问题描述】:

我正在制作一个公交路线项目,我需要谷歌地图来确定车站和停靠点,我从谷歌地图中的 JavaScript 获取坐标,现在我需要将这些坐标传递给一个 java 类我可以在这些坐标上进行不同的处理。我在 netbeans 上使用 JSF -Java server faces-。谁能帮我将这些坐标传递给 .java 类? 提前致谢

【问题讨论】:

    标签: java javascript jsf jsf-1.2


    【解决方案1】:

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

    祝你好运。

    分享和享受。

    【讨论】:

      【解决方案2】:
      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>
      

      【讨论】:

        【解决方案3】:

        您可以使用&lt;a4j:jsFunction&gt;javascript 值传递给托管bean。这是一个例子。

        这是你的 js 数组

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

        这是您的页面。请注意,sendData 是您的 jsFunction 的名称,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))。
        &lt;h:form&gt; 不一定在它周围。但是,如果您想在 clickcommandButton 时调用它,则该按钮应该在表单中。
        正如您在评论中所说,如果您的坐标数组的名称是path,那么您可以像这样调用上面的jsFunctionsendData(path.join())。您不要在jsFunction 中添加任何javascript 代码。 只需像调用普通的javascript 函数一样,从javascript 代码中调用jsFunction

        【讨论】:

        • 我不知道我应该把
          ... 代码放在哪里,我有将点放在 var path[] 中的函数,我应该把这段代码放在这个 jsfunction 中,如果是的,那么 jsFunction 应该是什么?无论如何 jsFunction 应该包含什么......对不起,但我是 web 应用程序的初学者,我真的需要你的帮助
        • 我在答案中添加了一段。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多