当HtmlInputText组件非空

时间:2017-08-11 10:09:06

标签: java jsf jsf-2 myfaces icefaces-3

我正在努力将应用程序从Icefaces 1.8升级到IceFaces 3.3

在WAS 8.5上运行,IceFaces 3.3(JSF 2.1 - MyFaces 2.1.17)

我有一个用于创建新用户的弹出框。

<f:facet name="body">
    <ice:panelGrid columns="3">
        <ice:outputText value="User Id"></ice:outputText>
        <ice:inputText id="CreateNewUserPopUp-UserId" binding="#{menuBean.userPanel.userN}" action="#{menuBean.userPanel.checkUserId}"
            disabled="#{menuBean.userPanel.validUserId and !menuBean.userPanel.userIdExists}" maxlength="30" value="#{menuBean.userPanel.userN}">
        </ice:inputText>
        <ice:message for="CreateNewUserPopUp-UserId" id="CreateNewUserPopUp-UserIdMessage" style="color: Red; font-style: italic; font-size: 12px;"/>

        <ice:outputText value="User Name"></ice:outputText>
        <ice:inputText id="CreateNewUserPopUp-UserName"  binding="#{menuBean.userPanel.userNameT}" 
            disabled="#{!menuBean.userPanel.validUserId or (menuBean.userPanel.validUserId and menuBean.userPanel.userIdExists)}"
            style="width:300px" maxlength="30">
        </ice:inputText>
        <ice:message for="CreateNewUserPopUp-UserName" id="CreateNewUserPopUp-UserNameMessage" style="color: Red; font-style: italic; font-size: 12px;"/>
        ...
        ...
    </ice:panelGrid>
</f:facet>

它绑定到userN和userNameT的HtmlInputText组件:

private HtmlInputText userN;
private HtmlInputText userNameT

当渲染弹出框时,所有字段都被初始化并且请求用户ID输入框的焦点

public void clearNewUser()
{
    setValidUserId(false);
    setUserIdExists(false);
    getUserN().setValue("");
    getUserNameT().resetValue();
    ...
    ...
    getUserN().requestFocus();
}

如果我在用户N框中按ENTER键,则执行验证码。

public void checkUserId()
{
    ...
    ...
    if (getUserN().getValue().toString().trim().length() < 1)
    {
        setMessage("User Id required");
    }
    else
    {
        DtcUsersTable dtcUsersTable = usersTableService.findById(getUserN().getValue().toString().toLowerCase());

        if (dtcUsersTable != null)
        {
            setValidUserId(true);
            setUserIdExists(true);
            setMessage("User Already Exists");
        }
        else
        {
            setValidUserId(true);
            setUserIdExists(false);
            getUserNameT().requestFocus();
            setMessage("Please Enter User Details");
        }
    }
}

如果输入框为空,则会向用户显示我的警告消息,说明“需要用户ID”。

如果我填充该框并按ENTER键,我的所有处理都已正确完成,输入框已经过验证和禁用,因此无法在验证后编辑用户ID,并选择用户名输入框作为新焦点。 然后在控制台日志中显示一条消息,说明:

000001a1 BeanValidator W   cannot validate component with empty value: APP:CreateNewUserPopUp-UserId

如果我将“用户名”框保留为空并选中其他所需信息框,则表示没有显示控制台消息,但如果我填写“用户名”输入框,则每次切换输入框时都会收到控制台消息:

0000019d BeanValidator W   cannot validate component with empty value: APP:CreateNewUserPopUp-UserName

我尝试过在线搜索,但却找不到其他人遇到同样的问题。我唯一能想到的就是更改日志级别以防止显示bean验证器警告,但这只是在地毯下刷问题而不是修复它。

有没有人知道我可以做些什么来解决这个问题?

1 个答案:

答案 0 :(得分:1)

我找到了答案。它抱怨xhtml中的value属性。

我已将userNuserNameT更改为String并将其移至value媒体资源中。我还在binding属性中添加了2个新命名的组件。

<f:facet name="body">
    <ice:panelGrid columns="3">
        <ice:outputText value="User Id"></ice:outputText>
        <ice:inputText id="CreateNewUserPopUp-UserId" binding="#{menuBean.userPanel.userInputN}" action="#{menuBean.userPanel.checkUserId}"
            disabled="#{menuBean.userPanel.validUserId and !menuBean.userPanel.userIdExists}" maxlength="30"
            value="#{menuBean.userPanel.userN}">
        </ice:inputText>
        <ice:message for="CreateNewUserPopUp-UserId" id="CreateNewUserPopUp-UserIdMessage" style="color: Red; font-style: italic; font-size: 12px;"/>

        <ice:outputText value="User Name"></ice:outputText>
        <ice:inputText id="CreateNewUserPopUp-UserName"  binding="#{menuBean.userPanel.userNameInputT}" 
            disabled="#{!menuBean.userPanel.validUserId or (menuBean.userPanel.validUserId and menuBean.userPanel.userIdExists)}"
            style="width:300px" maxlength="30"
            value="#{menuBean.userPanel.userNameT}">
        </ice:inputText>
        <ice:message for="CreateNewUserPopUp-UserName" id="CreateNewUserPopUp-UserNameMessage" style="color: Red; font-style: italic; font-size: 12px;"/>
        ...
        ...
    </ice:panelGrid>
</f:facet>

我已经在Java类中添加了2个新的HtmlInputText组件

private HtmlInputText userNameInputT;
private HtmlInputText updateUserNameInputT;

private String userN;
private String userNameT;

更新了初始化字段的方法

public void clearNewUser()
{
    setValidUserId(false);
    setUserIdExists(false);
    setUserN("");
    setUserNameT("");
    ...
    ...
    getUserInputN().requestFocus();
}

更新了请求焦点的验证代码,并更改了以前在输入字段上使用.getValue().toString()的任何代码。正如他们现在的字符串,这是不需要的。

public void checkUserId()
{
    ...
    ...
    if (getUserN().trim().length() < 1)
    {
        setMessage("User Id required");
    }
    else
    {
        ...
        ...
        else
        {
            setValidUserId(true);
            setUserIdExists(false);
            getUserNameInputT().requestFocus();
            setMessage("Please Enter User Details");
        }
    }
}

现在一切正常