首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF2、Ajax部分更新和ui重复-提交和更新动态添加的文本框

JSF2、Ajax部分更新和ui重复-提交和更新动态添加的文本框
EN

Stack Overflow用户
提问于 2011-11-10 17:23:47
回答 1查看 3.7K关注 0票数 0

我有一个JSF2应用程序和一个包含以下代码的页面:

代码语言:javascript
复制
<h:inputText id="someInput" required="true" />

<p:outputPanel id="itemsPanel">
    <ui:repeat var="i" value="#{myBean.itemIndices}" id="items">
        <h:inputText 
            id="itemInput" 
            value="#{myBean.dataItems[i]}" 
            />
        <h:panelGroup 
            layout="block" 
            styleClass="clear" 
            rendered="#{((i+1) % 10 == 0)}" 
            />
    </ui:repeat>
</p:outputPanel>
<br/>
<p:commandButton
    classStyle="btn" 
    value="Add Row"
    actionListener="#{myBean.increaseItemsCount}" 
    update="itemsPanel" 
    immediate="false"
    ajax="true"
    />

ui:repeat根据itemIndicesdataItems属性动态呈现多个if文本框。"Add Row“按钮调用一个方法,该方法将动态增加itemIndicesdataItems的数量,因此会出现额外的文本输入。

如果文本框someInput中没有值,则当前代码将不起作用,因为AJAX请求也会验证表单,并且验证失败。在这种情况下,按下按钮没有任何视觉效果,甚至不会向用户反馈验证未通过(因为我只更新itemsPanel )。

如果我将按钮更改为immediate="true",那么验证问题就不再存在了。不幸的是,我希望能够恢复用户在添加新行之前可能已经更改的动态输入字段的值。immediate="true"属性导致表单不会提交到服务器,因此用户输入的数据将不会持久化。

一种可能的解决方案是将process="all dynamic input ids csv"属性添加到命令按钮,并将immediate属性设置回true。这将导致服务器仅验证process属性中指定的输入,并且这些输入将被持久化。这里的问题是这些输入ids是由JSF动态生成的,我想不出一种适当的方法将它们作为CSV来获取。我也不喜欢在myBean中动态生成ids的解决方案,这种解决方案依赖于假设JSF将如何输出它们。

我们将非常感谢所有的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-11 02:24:31

您可以使用process="itemsPanel"

代码语言:javascript
复制
<p:commandButton
    classStyle="btn" 
    value="Add Row"
    actionListener="#{myBean.increaseItemsCount}" 
    process="itemsPanel" 
    update="itemsPanel" 
    ajax="true"
    />

您应该只将命令按钮移动到<h:outputPanel id="itemsPanel">中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8077317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档