我有这个观点:
<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
上输入的内容传递给我的操作方法。我怎样才能做到这一点?
答案 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>
,这确实不直观。