【问题标题】:inputtext returns null after update the disabled/readonly option true to falseinputtext 在将 disabled/readonly 选项更新为 false 后返回 null
【发布时间】:2015-05-11 05:48:00
【问题描述】:

我有一个开关(布尔值)。当开关为真时,输入文本禁用选项为真。当开关为假时,输入文本禁用选项为假,所以我可以输入数据。但是这个数据返回空值。

    <h:form id="form">
                <p:inputSwitch value="#{switchMB.isTrue}" onLabel="True"
                    offLabel="False">
                    <p:ajax update="inputText" />
                </p:inputSwitch>

                <p:inputText id="inputText" value="#{switchMB.inputTextValue}"
                    disabled="#{switchMB.isTrue}"  />

                <p:commandButton action="#{switchMB.addValue}" 
                    update=":form" value="Add"></p:commandButton>
    </h:form>

当我在inputText中输入数据时,这个数据总是返回null。我该如何解决这个问题?如何更新 inputText 中的禁用选项并正确输入数据?提前谢谢..

【问题讨论】:

    标签: jsf primefaces jsf-2.2


    【解决方案1】:

    作为防止篡改/黑客请求的一部分,disabled 属性在表单提交的应用请求值阶段进行评估。所以基本上你需要确保#{switchMB.isTrue} 的计算结果与渲染表单时的结果完全相同。最简单的方法是将#{switchMB} 托管bean 放在视图范围而不是请求范围内。

    @Named // Or @ManagedBean
    @ViewScoped // Watch out that you import from the right package!
    public class SwitchMB {}
    

    也就是说,当您将其放入请求范围时,所有属性都将重置为其默认值,在您的特定情况下,这显然会触发 disabled="true"

    另见:

    【讨论】:

    • thanks.It's work.但我在同一个 managedBean 中有一个用于 dataTable 的 getList 方法。当我将新的切换 inputText(数据)添加到 db(所以从这个 db 到数据表)时,我更新/请求数据表列表。所以如果我使用 viewscoped,数据表列表不是最新的。所以我应该使用 RequestScoped 或者我只为这个开关操作创建新的 managedBean。我该怎么办?这是唯一的选项(viewscoped)吗?再次感谢.
    • 然后确保在您的操作中您还明确更新了 viewscoped bean 中的列表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多