使用JavaScriptvar或其他标记值从JSF backingbean调用函数



我在这里看到了很多答案,但没有一个能满足我的要求,我需要以一种不提交表单的方式来做这件事,通过使用隐藏按钮方法(使用ajax调用)并从javascript调用click()事件,方法被调用,但我需要在方法中传递int,我该怎么做?

我可以从javascript var或隐藏的输入文本字段中获取int,只是不知道如何做到这一点,有人能帮我吗?

JSF代码:

<script type="text/javascript" language="javascript">
    var position;
</script>
<h:inputHidden id="hiddenHolder" value="#{backingBean.beanPosition}" />
<h:commandButton id="hiddenButton" style="display: none;">
    <f:ajax listener="#{backingBean.testMethod(need to send here javascript var or inputHidden value)}"/>
</h:commandButton>

Bean函数;

public void testMethod(int i){
    //do stuff
}

当我从没有反映在backingBean中的javascript更改hiddenHolder值时,我想它需要提交才能工作。这就是为什么我需要在方法调用中传递值。

当我从没有反映在backingBean中的javascript更改hiddenHolder值时

您实际上并没有告诉JSF处理输入值。应使用<f:ajax execute>,默认为@this(当前输入或命令组件)。由于<f:ajax>包含在命令组件中,因此将只处理命令组件本身(其操作)。

因此,只需显式指定输入值和命令组件:

<f:ajax execute="@this hiddenHolder" ... />

或者,如果这一切都在同一个表单中,则使用@form:

<f:ajax execute="@form" ... />

另请参阅:

  • 如何使用本地JavaScript在HTMLDOM事件上调用JSF管理的bean
  • 如何使用jsf.ajax.request在jsf中手动发送ajax请求
  • 在jQuery中用参数调用JSF托管的bean方法

为此使用OmniFaces命令脚本。效果很好(或者使用PrimeFaces remoteCommand,如果你已经使用过的话)

要防止表单的其余部分被提交,请使用execute属性,如f:ajax调用(p:remoteCommand上的process属性),或使用单独的表单

最新更新