Java &引用;无法验证值为空的组件";HtmlInputText组件不为空时发出警告

Java &引用;无法验证值为空的组件";HtmlInputText组件不为空时发出警告,java,jsf,jsf-2,myfaces,icefaces-3,Java,Jsf,Jsf 2,Myfaces,Icefaces 3,我正在将一个应用程序从Icefaces 1.8升级到Icefaces 3.3 在WAS8.5、IceFaces3.3(JSF2.1-MyFaces2.1.17)上运行 我有一个用于创建新用户的弹出框 <f:facet name="body"> <ice:panelGrid columns="3"> <ice:outputText value="User Id"></ice:outputText> <ic

我正在将一个应用程序从Icefaces 1.8升级到Icefaces 3.3

在WAS8.5、IceFaces3.3(JSF2.1-MyFaces2.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>
呈现弹出框时,所有字段都将初始化,并为用户Id输入框请求焦点

public void clearNewUser()
{
    setValidUserId(false);
    setUserIdExists(false);
    getUserN().setValue("");
    getUserNameT().resetValue();
    ...
    ...
    getUserN().requestFocus();
}
如果在userN框中按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");
        }
    }
}
如果我将用户名框留空并通过其他必需的信息框进行制表,则不会显示控制台消息,但如果我填充用户名输入框,则每次切换输入框时,我都会收到控制台消息:

0000019d BeanValidator W   cannot validate component with empty value: APP:CreateNewUserPopUp-UserName
我曾尝试在网上搜索,但找不到其他人有同样的问题。我能想到的唯一一件事是更改日志级别,以防止显示bean验证器警告,但这只是掩盖问题,而不是解决问题


有人知道我能做些什么来解决这个问题吗?

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

我已将
userN
userNameT
更改为
String
,并将它们移动到
属性中。我还向
binding
属性添加了两个新命名的组件

<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>
更新了初始化字段的方法

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");
        }
    }
}
public void checkUserId()
{
...
...
if(getUserN().trim().length()<1)
{
setMessage(“需要用户Id”);
}
其他的
{
...
...
其他的
{
setValidUserId(真);
setUserIdExists(false);
GetUsernameInput().requestFocus();
setMessage(“请输入用户详细信息”);
}
}
}
现在一切都好了

private HtmlInputText userNameInputT;
private HtmlInputText updateUserNameInputT;

private String userN;
private String userNameT;
public void clearNewUser()
{
    setValidUserId(false);
    setUserIdExists(false);
    setUserN("");
    setUserNameT("");
    ...
    ...
    getUserInputN().requestFocus();
}
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");
        }
    }
}