【问题标题】:How to hide validatorMessage when field is empty字段为空时如何隐藏验证器消息
【发布时间】:2017-06-19 11:09:48
【问题描述】:

请帮助如何在用户清除字段时隐藏验证器消息:

 <div class="item">
    <p:outputLabel for="firstName" value="#{msgs['customerForm.firstName']}"/>
    <p:inputText id="firstName" value="#{customerBean.customer.firstName}"
    requiredMessage="#{msgs['Error.firstName.mandatory']}"
    validatorMessage="#{msgs['Error.firstName.wrongFormat']}"required="true">
    <f:validateRegex pattern="^([a-zA-Z]+[a-zA-Z\s\-]*){1,255}$" />
    </p:inputText>
    <p:message id="m_firstName" for="firstName" display="text"/>
</div>

【问题讨论】:

  • 您在 UI 中使用的技术是什么?是JSP吗?角JS?我实际上并不太确定这段代码与 Java 有什么关系......
  • 很可能是素面
  • 但是当字段为空时它应该显示消息,因为字段是required - 这正是重点。
  • 你尝试在输入中定义
  • @M.Prokhorov:是的,但如果你看正确(并再次阅读 Q)你会注意到有第二个(正则表达式)验证器并且 OP 想要删除一个(可见) 清除字段时的验证错误。所以“必需”验证器不是这里的问题。

标签: jsf primefaces


【解决方案1】:

您定义了具有两个验证的字段:
* 必填值验证器
* 正则表达式验证器

两个验证器具有相同的优先级,并且都针对您的字段值运行。并且这两个验证器都将空值视为一个问题,并且您的框架无法确定这两个外观等效的故障中的哪一个是“实际”故障,因此会同时显示两者。

要“修复”它,您应该允许空值通过您的正则表达式,如下所示:

      <f:validateRegex pattern="^([a-zA-Z]+[a-zA-Z\s\-]*){0,255}$" />

请注意,我更改了数字限定符以允许 0-255 个字符,而不是像以前那样的 1-255 个字符。 这应该允许您的两个验证器按照您的预期覆盖不同的无效值情况。

【讨论】:

  • 它的作品
  • 但是我应该在日历中做什么?
  • @DmitriyLaletin,它不太可能与您发布的配置相同,因为它们做不同的事情。可能看起来它们的工作方式相似,但最终却没有。
  • @DmitriyLaletin,至于日历,我不太明白你的意思。我建议你问另一个问题,或者如果它足够相似,可以更新这个问题。
【解决方案2】:

如果您将它放在输入元素中,您可以更新错误消息。它会验证每个 keyup 事件的输入。

<f:ajax execute="@this" event="keyup" render="m_firstName" />

【讨论】:

  • 也许你可以为日历的事情打开另一个线程@Dmitriy Laletin
  • 谢谢!请给我另一个帮助 - 现在我需要更改代码 - 所以我必须在用户按下保存按钮(我的 xhtml 的结尾部分)时显示错误消息,如果输入字段被清除,则动态隐藏错误消息
  • 您为什么不接受这个答案并提出一个新问题,我们也会对此进行调查。我们不应该超出这个问题的范围。您可以在此处将网址粘贴到您的新问题中。
  • 我的问题有限,直到明天我才能打开新问题
猜你喜欢
  • 2013-05-30
  • 1970-01-01
  • 2012-10-30
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
相关资源
最近更新 更多