【问题标题】:Validate inputText not in form tag验证 inputText 不在表单标签中
【发布时间】:2013-12-24 03:32:09
【问题描述】:

我正在创建一个将数据发布到外部 url (authorizeNet DPM) 的表单。我需要 jsf 在允许提交之前验证 inputText。在这种情况下如何让验证规则起作用?

<form action="EXTERNAL_URL" method="POST">
   <h:inputText id="x_card_num" required="true" requiredMessage="A 16-digit credit card number is required.">
      <f:ajax event="change" render="@this" />  
      <f:validateLength maximum="20" minimum="3" />
      <f:validateRegex pattern="[0-9]{16}" />
   </h:inputText>
<h:commandButton value="Submit" id="submit"/> 
</form>

【问题讨论】:

    标签: jsf-2 richfaces authorize.net


    【解决方案1】:

    JSF 在服务器上工作,所以你总是需要先回发到你自己的服务器。从那里您可以手动发布到目标服务器(服务器到服务器通信)。您甚至可以捕获该服务器的响应并将其流式传输到客户端。

    您的客户端将看到您服务器的 URL,除非目标服务器响应重定向。

    【讨论】:

    • 验证后是否可以重定向到该外部服务器页面? authorizenet dpm 的工作方式是将您发布到一个 url,它会验证并将您重定向到另一个 url,然后处理并最终将您返回到您的收据页面
    • @Sixthpoint 是的,您可以进行重定向,但必须是 307。“正常”重定向始终基于 GET。 POST 重定向很少见,一些浏览器可能会抱怨(但请测试确定)。但是,认为验证是一种方便。另一台服务器仍然无法信任该请求。
    【解决方案2】:

    我认为您可能需要将 JSF 与普通 JavaScript 混合使用,并使用 PrimeFaces 的&lt;p:commmandButton&gt;

    <h:form>
       <h:inputText id="x_card_num" required="true" requiredMessage="A 16-digit credit card number is required.">
          <f:ajax event="change" render="@this" />  
          <f:validateLength maximum="20" minimum="3" />
          <f:validateRegex pattern="[0-9]{16}" />
       </h:inputText>
       <h:message id="msg" for="x_card_num" />
    
       <p:commandButton value="Submit" process="@this, x_card_num" update="msg"
                        oncomplete="if (!args.validationFailed) populatePostFormAndSubmit();" />
    </h:form>
    
    <form id="postForm" action="EXTERNAL_URL" method="POST">
        <input id="postInput" />
    </form>
    

    流程是:

    1. 用户在 JSF 表单中输入卡号,然后单击Submit 开始通过 AJAX 请求进行验证。
    2. 如果没有验证错误,将卡号从x_card_num 输入复制到postInput 并使用JavaScript 提交postForm

    【讨论】:

    • 为什么需要 PrimeFaces? OP 已经拥有的 RichFaces 也可以这样做(只需要更改 p --> a4j,进程 --> 执行,更新 --> 渲染,args.validationFailed --> #{facesContext.validationFailed})。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2013-07-25
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    相关资源
    最近更新 更多