1

我有这样的看法:

<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>

我需要设置键入的值<h:inputText>并将其作为参数传递给我的<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给我的操作方法。我怎样才能做到这一点?

4

1 回答 1

1

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

<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了默认的执行属性,因此您无需在其命令组件中显式指定它。在标准<f:ajax>中,它默认为@this命令组件,这确实是不直观的。

于 2012-06-06T15:46:52.063 回答