0

我最初使用 a4j:commandButton 在 h:inputText 字段中发布了一个值,但我不得不将 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 字段的值?

4

1 回答 1

1

您不需要numberOfPatients在执行 ajax 支持时显式设置 的值。a4j:support标签在其执行期间处理其父组件,这意味着numberOfPatients将为每个onkeyup事件设置值,即使您不调用action事件。你可以在Richfaces 的网站上更好地看到它:

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>

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

于 2013-10-22T15:03:30.327 回答