【问题标题】:Jsf 2.1 PreRender validation on view视图中的 Jsf 2.1 PreRender 验证
【发布时间】:2013-08-06 16:13:52
【问题描述】:

我想要一个验证器来重置我的密码。它将查看 URL 并从中解析出 token_id。我已经完成了其余的逻辑。我需要从我的 jsf 视图在页面加载时调用此验证器。但是我找不到使用 preRender 函数调用验证器的方法。下面的代码是调用 userBean 并检查令牌。我将如何更改它以调用验证器而不是托管 bean 属性?

<f:metadata>
    <f:event listener="#{userBean.check()}" type="preRenderView"/>
</f:metadata>

resetPassword.xhtml

<h:body>
    <!-- Preload to assure the token is correct -->
    <ui:composition template="/WEB-INF/templates/base.xhtml">

        <ui:define name="title">Recover your username</ui:define>
        <ui:define name="metadata">
            <f:metadata>
                <f:viewParam name="tok_id" value="#{userBean.token}" validator="resetValidator" />
            </f:metadata>
        </ui:define>

        <ui:define name="content">
           You should receive a email shortly with your new password in it.
        </ui:define>
    </ui:composition>
</h:body>

有没有可能与我使用模板有关?

base.xhtml

<h:body>
   <div id="wrapper">
      <f:view>
        <ui:insert name="metadata"/>
    <!-- Header Begin -->
       <ui:insert name="header">
              <ui:include src="/WEB-INF/templates/header.xhtml" />
       </ui:insert>
           <!-- Header End -->
        <div id="mainBox">
           <div id="main">
                <!-- Content Begin -->
            <ui:insert name="content" >
               <ui:include src="/WEB-INF/templates/content.xhtml" />
            </ui:insert>
            <!-- Content End -->
            </div>
         </div>
                 <div style="clear: both"></div>
        <!-- Footer Begin -->
        <ui:insert name="footer">
            <ui:include src="/WEB-INF/templates/footer.xhtml" />
        </ui:insert>
        <!-- Footer End -->
    </f:view>
       </div>
       <h:outputScript library="js" name="base.js" />
 </h:body>

content.xhtml

<h:body>
    <ui:composition></ui:composition>
</h:body>

【问题讨论】:

    标签: java jsf-2


    【解决方案1】:

    使用&lt;f:viewParam&gt;代替手动抓取请求参数。

    <f:viewParam name="token_id" value="#{bean.tokenId}" validator="yourTokenIdValidator" />
    

    另见:

    【讨论】:

    • 请从开发人员的角度而非最终用户的角度详细说明“不起作用”。
    • 验证器没有触发,我也看过你的文章。它不会抛出任何错误。如果当前触发了验证器,我正在向控制台写入语句。我将包含我的基本模板
    • 那么,没有名称为token_id的请求参数?如果您也想涵盖该验证案例,请添加 required="true"
    • 我已将其更改为 tok_id,如果我在 URL 中没有它,它确实会引发错误,并将所需的设置为 true。但是,验证器仍然没有响应,我将其更改为“resetValidator”
    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2011-01-29
    相关资源
    最近更新 更多