我正在用JavaScript准备一些变量(在我的特定情况下,我想获取GPS位置):
function getVars() {
// ...
var x = locationInfo.lng;
var y = locationInfo.lat;
}
我想通过下面的命令按钮将它们发送到我的托管bean:
<h:commandButton value="submit" onclick="getVars()" action="#{bean.submit(x,y)}" />
public void submit(int x, int y) {
// ...
}
如何将JavaScript中的
x
和y
变量发送到JSF托管bean操作方法? 最佳答案
让JS以相同的形式将它们设置为隐藏的输入值。
<h:form id="formId">
<h:inputHidden id="x" value="#{bean.x}" />
<h:inputHidden id="y" value="#{bean.y}" />
<h:commandButton value="submit" onclick="getVars()" action="#{bean.submit}" />
</h:form>
function getVars() {
// ...
var x = locationInfo.lng;
var y = locationInfo.lat;
document.getElementById("formId:x").value = x;
document.getElementById("formId:y").value = y;
}
命令按钮操作方法可以按通常方式将它们作为bean属性进行访问。
private int x;
private int y;
public void submit() {
System.out.println("x: " + x);
System.out.println("y: " + y);
// ...
}
// Getters+setters.
一种替代方法是使用OmniFaces
<o:commandScript>
或PrimeFaces <p:remoteCommand>
代替<h:commandButton>
。另请参阅How to invoke a JSF managed bean on a HTML DOM event using native JavaScript?