0

我为我的 JSF 2.2 应用程序创建了以下自定义标签:

<et:gridRowLabelPasswordMessage
    label_name="Password"
    password_id="password"
    password_value="#{myAuthenticator.password}"
    password_required="true"
    password_match=""
    password_binding="#{pw}" />

以下是自定义标签文件的关键部分:

<p:password
    id="#{password_id}"
    value="#{password_value}"
    placeholder="#{label_name}"
    binding="#{password_binding}"
    required="#{password_required}"
    requiredMessage="#{label_name} is required."
    match="#{password_match}" />

由于 PrimeFaces p:password 的问题,我无法设置 match="" 所以我需要测试 password_match 并且只有在 password_match 不为空时才包含 match。首先,我尝试使用 ui:fragment ,如下所示:

<ui:fragment rendered="#{empty password_match}">
    <p:password
        id="#{password_id}"
        value="#{password_value}"
        placeholder="#{label_name}"
        binding="#{password_binding}"
        required="#{password_required}"
        requiredMessage="#{label_name} is requred." />
</ui:fragment>
<ui:fragment rendered="#{not empty password_match}">
    <p:password
        id="#{password_id}"
        value="#{password_value}"
        placeholder="#{label_name}"
        binding="#{password_binding}"
        required="#{password_required}"
        requiredMessage="#{label_name} is requred."
        match="#{password_match}" />
</ui:fragment>

结果是当我设置 password_match = "" 时 p:password 根本没有呈现。换句话说,两个测试都没有返回 true。我唯一的理论是 ui:fragment 在自定义标记文件中不起作用。

然后我将我的代码更改为以下代码,它按预期工作。

<c:choose>
    <c:when test="#{empty password_match}">
        <p:password
            id="#{password_id}"
            value="#{password_value}"
            placeholder="#{label_name}"
            binding="#{password_binding}"
            required="#{password_required}"
            requiredMessage="#{label_name} is required." />
    </c:when>
    <c:otherwise>
        <p:password
            id="#{password_id}"
            value="#{password_value}"
            placeholder="#{label_name}"
            binding="#{password_binding}"
            required="#{password_required}"
            requiredMessage="#{label_name} is required."
            match="#{password_match}" />
    </c:otherwise>
</c:choose>
4

0 回答 0