【问题标题】:Post value using h:inputtext and a4j:support onkeyup使用 h:inputtext 和 a4j:support onkeyup 发布值
【发布时间】:2013-10-31 11:06:57
【问题描述】:

我最初使用 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 字段的值?

【问题讨论】:

    标签: jsf richfaces ajax4jsf


    【解决方案1】:

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

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

    当 "ajaxSingle" 属性值为 "true" 时,它命令仅将当前组件的值(以及 &lt;a4j:actionparam&gt; 值,如果有的话)包含到请求映射中。在 &lt;a4j:support&gt; 的情况下,它是父组件的值。下面放一个例子:

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

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

    【讨论】:

    • 所以我正在使用这个建议的代码进行调试,并看到 numberOfPatients 被设置为我在文本框中的输入值。但是,当我单击下面创建的 s:link 按钮时,将再次调用 set 方法并将其重置为 0。您的建议似乎是正确的,但我可能需要使用此链接执行其他操作
    • 这是 request scoped 托管 bean 的预期行为。考虑到您在进行 ajax 调用时正在生成另一个请求,并且 bean 设置为仅针对请求而存在。您使用的是哪个 JSF 版本?在 JSF 2 中,您可以使用 view scope 来延长 bean 的寿命,但 JSF 1.x 会强制您以某种方式保留您设置的值,例如使用会话属性,因为 view scope 没有在那里实现.其他选择是制作整个 bean session scoped.
    • 我使用的是 JSF 1.1,所以我想事情变得有点复杂了。我会考虑保留价值,但看起来我走上了正轨!感谢您对所有内容的详细解释,我正在学习所有这些内容
    • 再次感谢,我将我的 bean 会话设置为范围,并且一切都运行良好。
    • @jackie 请不要为您的 bean 使用会话范围,而是将其更改为请求范围并在您的 bean 中使用 @KeepAlive 注释来保持您的请求范围 bean 在用户仍在相同的视图。
    猜你喜欢
    • 2011-05-18
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2015-11-29
    相关资源
    最近更新 更多