使用h:inputtext和a4j发布值:支持onkeyup

时间:2013-10-22 14:09:12

标签: jsf richfaces ajax4jsf

我最初在h:inputText字段中使用a4j:commandButton发布了一个值,但我不得不将commandButton更改为s:link,因为commandButton也触发了要导出的pdf文档,我相信ajax调用,文档在浏览器上呈现。

所以现在我尝试使用h:inputText和a4j:support

发布值
<h:inputText id="numberOfPatients" 
    value="#{printLabelsReqFormsAction.numberOfPatients}">
    <a4j:support event="onkeyup" 
        action="#{printLabelsReqFormsAction.setNumberOfPatients(numberOfPatients)}"/>
</h:inputText>

(抱歉奇怪的格式化..)

我的setNumberOfPatients(x)被调用,但我认为我没有正确传递该值。我应该如何传递h:inputText字段的值?

1 个答案:

答案 0 :(得分:1)

执行ajax支持时,您无需显式设置numberOfPatients的值。 a4j:support标记在执行期间处理其父组件,这意味着将为每个numberOfPatients事件设置onkeyup的值,即使您没有调用action事件。你可以在Richfaces' site找到更好的信息:

  

RichFaces使用基于表单的方法进行Ajax请求发送。这意味着每次单击Ajax按钮或生成异步请求时,最近的JSF表单中的数据都将与XMLHTTPRequest对象一起提交。表单数据包含表单输入元素中的值和辅助信息,例如状态保存数据。

     

当“ajaxSingle”属性值为“true”时,它命令仅包括当前组件的值(以及<a4j:actionparam>值,如果有的话)到请求映射。如果是<a4j:support>,则它是父组件的值。下面是一个例子:

<h:form>
    <h:inputText value="#{person.name}">
        <a4j:support event="onkeyup" reRender="test" ajaxSingle="true"/>
    </h:inputText>
    <h:inputText value="#{person.middleName}"/>
</form>

换句话说,对于你的情况,这应该有效:

<h:inputText id="numberOfPatients" 
    value="#{printLabelsReqFormsAction.numberOfPatients}">
    <a4j:support event="onkeyup" ajaxSingle="true"/>
</h:inputText>

仅当您要在事件发生时添加额外逻辑时才指定操作方法。