【问题标题】:Problem with a validator used with JSF与 JSF 一起使用的验证器出现问题
【发布时间】:2011-08-04 07:27:14
【问题描述】:

我正在使用 JSF2.0

我使用了一个验证输入文本的验证器,但似乎没有消息表明输入错误!

更新:

他们是在提交之前验证输入文本的方法吗,就在输入输入文本之后?

JSF 代码:

 <h:form id="form3">
      <p:panel visible="#{bean.form3Visible}" style="width: 900px;">
         <h:panelGrid width="width: 900px;"    columns="1">
         <p /> 
               <h:selectOneMenu value="#{bean.platform}">
                 <f:selectItem itemLabel="-- Select Plateform-- " itemValue="0"/> 
                 <f:selectItems value="#{bean.getMyListPaltform()}" />
                 <f:ajax listener="#{bean.UpdateChangeEnvironment()}"  render="Environment" />
                </h:selectOneMenu>
             


<h:panelGrid width="width: 160px;" columns="9">                                           
 <h:inputText id="ssFrom" value="#{bean.ssFrom}" required="true"  style="width: 18px" >    <f:validateLongRange   minimum="0" maximum="24"/>
 </h:inputText>
 <h:message  for="ssFrom" id="msgg" style="color:red" />
    </h:panelGrid>                                                                                       
      </p:panel>    
   </h:form>



  

我已经解决了我的问题,这就是答案,也许它可以帮助其他人:

      <h:selectOneMenu value="#{bean.availabilityDisplay}" id="Display">
          <f:selectItem itemLabel="-- Select Display-- " itemValue="0"/> 
          <f:selectItems value="#{bean.getMyListDisplays()}"/>
          <f:ajax render="Target" />
      </h:selectOneMenu>
         
            
    <p:outputPanel id="Target">
      <h:selectOneMenu value="#{bean.frequency}" id="frequency" rendered="#{bean.availabilityDisplay == 'Availibility Histogramme' or bean.availabilityDisplay == 'Availibility line'}">
        <f:selectItem itemLabel="-- Select Frequency-- " itemValue="0"/>
        <f:selectItems  value="#{bean.getMyListFrequency()}"/>
     </h:selectOneMenu>
   </p:outputPanel>

谢谢

【问题讨论】:

  • 我按照您应该做的那样格式化了您的 XML。现在您可以看到第 3 行中的 &lt;h:panelGrid 没有结束标记。
  • 请发布另一个关于客户端输入验证的问题。
  • 你不应该在一个问题中混合不同的问题/问题。在自己的问题中发布每个独立的问题/问题。

标签: java jsf jsf-2


【解决方案1】:

您需要添加h:messageh:messages 标记以显示错误消息。

<h:inputText value="#{bean.ssFrom}" required="true" style="width: 18px" id="ssFrom"> 
    <f:validateLongRange minimum="0" maximum="59"/>
</h:inputText>

<h:message for="ssFrom" />
<!-- OR -->
<h:messages />

h:message 用于显示单个字段的错误(由for 属性连接)。 h:messages 可用于显示页面的所有错误信息。如果您设置globalOnly="true",它将仅显示未被h:message 标签“捕获”的消息。

【讨论】:

  • 您好,感谢您的回复,我尝试添加 ::message 但没有任何反应!!我还有一个问题,验证器会在输入文本后或提交表单后验证输入文本吗?因为我想在提交表单之前验证文本
  • @rym 验证器将在提交表单后进行验证。请将您当前的代码 sn-p 添加到您的问题中。
  • 请如上所述添加结束&lt;/h:panelGrid&gt;(编辑),然后重试。
【解决方案2】:

能否请您粘贴整个页面代码。

但可能出现的问题是:

  • 您尚未在页面中使用 h:message 或 h:messages 标记。仅当页面中使用其中任何一个时才会显示消息
  • 或者您的文本字段可能未包含在 h:form 中
  • 另请注意,当文本字段为空时,不会触发范围验证器。
  • 对于有用的消息,请在文本字段中使用requiredMessage="whatever" validatorMessage="whatever" 属性

【讨论】:

    【解决方案3】:

    为了在不提交表单的情况下验证&lt;h:inputText&gt;,您需要添加ajax 功能。

    <h:inputText id="ssFrom" value="#{bean.ssFrom}" required="true"  style="width: 18px" >    
    <f:validateLongRange   minimum="0" maximum="24"/>
    <f:ajax execute="@this" event="keyup"/>
    </h:inputText>
    

    f:ajax 标记将在每个按键事件中更新您的 ssForm 变量,如果发生验证错误,它将显示在 &lt;h:message for="ssFrom" /&gt; 中,正如 Mulmoth 所说。

    【讨论】:

      猜你喜欢
      • 2014-04-03
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 2015-06-26
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多