以输入值作为参数调用aciton方法

时间:2012-06-06 15:19:58

标签: ajax jsf jsf-2

我有这个观点:

<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()}"值=“确定”&gt;`

这是我的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上输入的内容传递给我的操作方法。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

这不是正确的做法。您需要通过execute的{​​{1}}属性指定需要处理/执行的输入组件的客户端ID。

<f:ajax>

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

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

另一种方法是使用public void processPage1() { System.out.println(model.getVarAjax()); // Look, JSF has already set it. } 处理整个表单,这是您在标准的ajaxified按钮中通常需要的。

execute="@form"

请注意,PrimeFaces和RichFaces等组件库已将 <f:ajax execute="@form" render=":carlin:carlinInput" /> 设置为默认的执行属性,因此您无需在其命令组件中明确指定它。在标准@form中,它在命令组件中默认为<f:ajax>,这确实不直观。