xforms密码确认密码

时间:2011-12-05 00:40:56

标签: html xml xhtml xforms

我有典型的密码,用xforms确认密码布局: 我的实例如下:

<data>
  <password/>
  <newPassword/>
  <confirmPassword/>
</data>

并且输入如下:

 <xf:secret ref="password">
        <xf:label>Old PAssword</xf:label>
   </xf:secret>

   <xf:secret ref="newPassword">
        <xf:label>New Password</xf:label>
   </xf:secret>
   <xf:secret ref="confirmPassword">
        <xf:label>Confirm Password</xf:label>
   </xf:secret>
   <div>
       <xf:submit submission="test">
            <xf:label>Change Password</xf:label>
       </xf:submit>
   </div>

我不知道如何使用confirmPassword验证和匹配newPassword,我知道使用<xf:bind标签的东西,但我还没有找到如何验证节点之间的相等性。 请帮忙!

1 个答案:

答案 0 :(得分:4)

您确实可以使用xf:bind来应用约束。只需将以下行添加到xf:model:

<xf:bind nodeset="password" required="true()" constraint=". != ''"/>
<xf:bind nodeset="newPassword" required="true()" constraint=". != ''"/>
<xf:bind nodeset="confirmPassword" required="true()" constraint=". = ../newPassword"/>

这将在所有三个输入字段后面添加所需的标记,确保填充所有三个字段,最后两个必须相同。您可以通过在newPassword的约束中添加'和'来添加密码和newPassword不能相同的约束。

就个人而言,我希望得到更多反馈。这些约束只会导致指标出现在每个字段后面,而没有任何进一步的信息。如果您在尝试提交信息时可以显示消息,那将是最好的。但这涉及到xforms事件处理,而我自己也没有经验告诉你如何。有一个xforms-submit-event,你可能会以某种方式捕获并采取行动。但最常见的问题是,一旦提交被提交,在将内容发送到服务器之前,您没有或只有很少的可能性向用户显示反馈。

另一种选择是使用xf:output显示条件消息。如果向xf:secret输入添加incremental =“true”属性,则每次击键时都会刷新这些属性。只需在xf:output元素上使用带有choose表达式的value属性。像这样:

<xf:output value="choose(password = '' or newPassword = '' or confirmPassword = '', 'Please enter current password, new password, and confirmation of new password', '')"/>

<xf:output value="choose(newPassword = '' or newPassword = confirmPassword, '', 'new password, and confirmation do not match!')"/>

如果您愿意,还可以在它们周围添加一些漂亮的打印。进行动态样式化的其他方法是使用xf:group,但我会将其作为练习留给你。

最后,请务必检查服务器端的所有值,以确保没有人在作弊。

HTH!