如何将 JavaScript 变量作为参数传递给 JSF 动作方法?

IT技术 javascript jsf parameter-passing managed-bean
2021-02-09 09:12:20

我正在用 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) {
    // ...
}

我如何发送xy从JavaScript到JSF变量托管bean的操作方法?

3个回答

让 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>. 另请参阅 ao如何使用本机 JavaScript 在 HTML DOM 事件上调用 JSF 托管 bean?

如果使用 PrimeFaces,我认为最好使用 javascript API PrimeFaces.widgets['widget_myInputTextId'] 来操作对象。如此处解释的示例:blog.hatemalimam.com/intro-to-primefaces-widgetvar
2021-03-15 09:12:20
见最后一段。
2021-03-21 09:12:20
如果你想从 JS 本身调用支持 bean 方法作为 #{bean.foo()} 怎么办?你能在括号里放一个 JS var 吗?
2021-04-08 09:12:20

如果使用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>
不,它不能工作......对不起。所述#{bean.x}服务器方将NEVER通过这段JavaScript被分配的x值(看哪个源客户端所示)。对不起,完全错误(其他人同意考虑反对票)。你能说服我的唯一方法是制作一个真正的最小可重现示例如果它对你有用,那么可能还有其他不可见的东西在做实际工作。
2021-03-17 09:12:20
这不是解决方案...... javascript 是评估渲染时间,它不会是在调用 'getVars() 时发生的分配(单击按钮)......错误的'答案'......(你有吗?真的试试看?)
2021-03-26 09:12:20
实际上,它对我来说是正确的,我以这种方式使用它没有问题。只要javascript在同一个xhtml中。
2021-04-05 09:12:20