【问题标题】:Invoke aciton method with input value as parameter以输入值作为参数调用 aciton 方法
【发布时间】:2012-06-06 15:19:58
【问题描述】:

我有这样的看法:

<h:form id="carlin">
    <h:outputText id="carlinInput" value="#{userBean.model.varAjax}"/>
    <a class="btn" data-toggle="modal" href="#myModal" >Launch Modal</a>
</h:form>

我有一个显示另一种形式的模态对话框:

<h:form>
    <h:inputText value="#{userBean.model.varAjax}"/>
    <h:commandLink action="#{userBean.processPage1()}" value="Ok">
        <f:ajax render=":carlin:carlinInput" />
    </h:commandLink>
</h:form>

我需要设置在&lt;h:inputText&gt; 上键入的值并将其作为参数传递给我的&lt;h:commandLink action="#{userBean.processPage1()}" value="OK">`

这是我的processPage1() 方法:

public void processPage1(String zip) {
    this.model.varAjax = zip;
}

我试过这个:

<h:commandLink action="#{userBean.processPage1(userBean.model.varAjax)}" value="OK">

但它不起作用。如果我传递一个硬编码的值,它会起作用:

<h:commandLink action="#{userBean.processPage1('teste')}" value="OK">

但我需要将用户在 inputText 上键入的内容传递给我的操作方法。我怎样才能做到这一点?

【问题讨论】:

    标签: ajax jsf jsf-2


    【解决方案1】:

    这不是正确的方法。您需要通过&lt;f:ajax&gt;execute 属性指定需要处理/执行的输入组件的客户端ID。

    <h:form>
        <h:inputText id="varAjax" value="#{userBean.model.varAjax}"/>
        <h:commandLink action="#{userBean.processPage1}" value="Ok">
            <f:ajax execute="varAjax" render=":carlin:carlinInput" />
        </h:commandLink>
    </h:form>
    

    这样 JSF 将使用提交的值设置模型值。

    public void processPage1() {
        System.out.println(model.getVarAjax()); // Look, JSF has already set it.
    }
    

    另一种方法是使用execute="@form",它将处理整个 表单,这是您在标准ajaxified 按钮中通常需要的。

            <f:ajax execute="@form" render=":carlin:carlinInput" />
    

    请注意,PrimeFaces 和 RichFaces 等组件库已将 @form 设为默认执行属性,因此您无需在其命令组件中显式指定它。在标准&lt;f:ajax&gt; 中,它在命令组件中默认为@this,这确实不直观。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2016-08-01
    • 1970-01-01
    相关资源
    最近更新 更多