如何将 JavaScript 变量作为参数传递给 JSF 操作方法?
How to pass JavaScript variables as parameters to JSF action method?
我正在 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) {
// ...
}
如何将 x
和 y
变量从 JavaScript 发送到 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>
or PrimeFaces <p:remoteCommand>
instead of <h:commandButton>
. See also a.o. How to invoke a JSF managed bean on a HTML DOM event using native JavaScript?
如果您使用 PrimeFaces,您可以使用链接到托管 bean 的隐藏输入字段,并且您可以使用 javascript 初始化它的值,对于 PrimeFaces, PF 函数可用于访问链接到隐藏输入的小部件变量,这样:
<script type="text/javascript">
function getVars() {
// ...
var x = locationInfo.lng;
var y = locationInfo.lat;
PF('wvx').jq.val( lat1 );
PF('wvy').jq.val( lng1 );
}
</script>
<p:inputText type="hidden" widgetVar="wvx" value="#{bean.x}" />
<p:inputText type="hidden" widgetVar="wvy" value="#{bean.y}" />
<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}" />
<script>
function getVars() {
var x;
var yt;
x=#{bean.x};
y=#{bean.y};
}
</script>
我正在 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) {
// ...
}
如何将 x
和 y
变量从 JavaScript 发送到 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>
or PrimeFaces <p:remoteCommand>
instead of <h:commandButton>
. See also a.o. How to invoke a JSF managed bean on a HTML DOM event using native JavaScript?
如果您使用 PrimeFaces,您可以使用链接到托管 bean 的隐藏输入字段,并且您可以使用 javascript 初始化它的值,对于 PrimeFaces, PF 函数可用于访问链接到隐藏输入的小部件变量,这样:
<script type="text/javascript">
function getVars() {
// ...
var x = locationInfo.lng;
var y = locationInfo.lat;
PF('wvx').jq.val( lat1 );
PF('wvy').jq.val( lng1 );
}
</script>
<p:inputText type="hidden" widgetVar="wvx" value="#{bean.x}" />
<p:inputText type="hidden" widgetVar="wvy" value="#{bean.y}" />
<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}" />
<script>
function getVars() {
var x;
var yt;
x=#{bean.x};
y=#{bean.y};
}
</script>