根据复选框值有条件地进行输入

yla*_*yla 3 validation checkbox jsf selectonemenu required

在我的 JSF 页面上,我有一个 HTML 输入复选框,允许用户选择是否想要礼物,并且<div>复选框信息下的部分只有在选中复选框时才会显示。选中复选框后,用户将需要选择一个选项(从下拉菜单中,下拉菜单的初始值= null);但是,如果未选中复选框,则不需要选择。

所以,这里有两个条件:

A.Checkbox被选中(==播放div视图)

  1. 用户选择一个选项 -> 好的
  2. 用户不选择任何内容-> 我希望显示所需的消息,这就是我所做的:

    <p:message style="margin: 10px" id="messages7" for="npsScoreSupport" />
    <h:selectOneMenu id="npsScoreSupport" value="#{npsBean.supportScore}" required="true" requiredMessage="Please select an option">
        <f:selectItems value="#{npsBean.ratingPickList}" />
    </h:selectOneMenu>
    
    Run Code Online (Sandbox Code Playgroud)

B. 复选框未选中(== div 视图被隐藏)

  1. 用户不选择任何东西 -> 好的,但页面仍然要求用户选择一个选项,因为我有 required="true"。

由于我需要 requireMessage 来确保在选中复选框时选择了一个选项,我想知道是否可以根据复选框的状态使 requireMessage 成为条件?(选中复选框时需要,未选中时不需要)有什么建议吗?

============更新======================

所以现在我更新了我的复选框并将它与 JAVA 类中的函数连接起来(默认布尔变量检查 = true)

<h:selectBooleanCheckbox class="someClass" value="#{someBean.check}" />
Run Code Online (Sandbox Code Playgroud)

这是我的选择器

<h:selectOneMenu id="OptSelector" value="#{someBean.Opt}" required="#{someBean.check}" requiredMessage="Please select and option">
                                                <f:selectItems value="#{npsBean.OptPickList}" />
Run Code Online (Sandbox Code Playgroud)

即使未选中复选框,提交也失败,似乎布尔检查从未改变。有谁知道为什么?

Bal*_*usC 5

只需让required菜单的属性检查复选框是否被选中。您可以通过按binding属性将物理复选框组件绑定到视图来实现,这将使其最终出现在一个UIInput实例中,该实例又具有getValue()返回提交/转换/验证值的方法。

<h:selectBooleanCheckbox binding="#{checkbox}" ... />
<h:selectOneMenu ... required="#{checkbox.value}" />
Run Code Online (Sandbox Code Playgroud)

(注:该代码是完整的,是,你并不需要将其绑定到一个bean属性!)

请注意,这并不像您明确要求的那样严格“有条件地显示消息”。它只是根据需要有条件地验证输入。消息是否被显示只是一个结果。

也可以看看:


更新:根据您尝试改为检查<h:selectBooleanCheckbox value>,这将不起作用,因为此值仅在更新模型值阶段更新,这是验证阶段之后required要检查属性的阶段。