【发布时间】:2012-11-19 03:39:36
【问题描述】:
我正在制作一个公交路线项目,我需要谷歌地图来确定车站和停靠点,我从谷歌地图中的 JavaScript 获取坐标,现在我需要将这些坐标传递给一个 java 类我可以在这些坐标上进行不同的处理。我在 netbeans 上使用 JSF -Java server faces-。谁能帮我将这些坐标传递给 .java 类? 提前致谢
【问题讨论】:
标签: java javascript jsf jsf-1.2
我正在制作一个公交路线项目,我需要谷歌地图来确定车站和停靠点,我从谷歌地图中的 JavaScript 获取坐标,现在我需要将这些坐标传递给一个 java 类我可以在这些坐标上进行不同的处理。我在 netbeans 上使用 JSF -Java server faces-。谁能帮我将这些坐标传递给 .java 类? 提前致谢
【问题讨论】:
标签: java javascript jsf jsf-1.2
有许多框架可以帮助您解决这个问题。例如,Primefaces 在他们的新 JSF 实现中内置了一个谷歌地图插件(http://www.primefaces.org/showcase-labs/ui/gmapHome.jsf)。手动操作也很容易。只需设置一个 Servlet 来处理 GET 请求并使用您希望将数据发送到 Servlet 的任何 Ajax 方法。我将从寻找一些 Servlet 和 Ajax 示例开始。同样,根据您使用的 JSF 实现,可能已经内置了 Ajax 工具。
祝你好运。
分享和享受。
【讨论】:
<h:inputHidden value="#{bean.value}"/>。<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() 将数组转换为字符串。
<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。
【讨论】: