"cannot validate component with empty value" 当 HtmlInputText 组件不为空时发出警告
"cannot validate component with empty value" warning when HtmlInputText component NOT empty
我正在努力将应用程序从 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();
}
如果我在 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");
}
}
}
如果输入框为空,我给用户的警告消息会正确显示 "User Id required"。
如果我填充框并按 ENTER,我的所有处理都正确完成,输入框被验证和禁用,因此无法编辑用户 ID post-验证和用户名输入框被选为新焦点。
然后控制台日志中显示一条消息,指出:
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 验证器警告,但这只是掩盖问题而不是修复它。
有人知道我可以做些什么来解决这个问题吗?
我找到了答案。它抱怨 xhtml 中的 value
属性。
我已将 userN
和 userNameT
更改为 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 class
中添加了 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");
}
}
}
现在一切正常
我正在努力将应用程序从 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();
}
如果我在 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");
}
}
}
如果输入框为空,我给用户的警告消息会正确显示 "User Id required"。
如果我填充框并按 ENTER,我的所有处理都正确完成,输入框被验证和禁用,因此无法编辑用户 ID post-验证和用户名输入框被选为新焦点。 然后控制台日志中显示一条消息,指出:
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 验证器警告,但这只是掩盖问题而不是修复它。
有人知道我可以做些什么来解决这个问题吗?
我找到了答案。它抱怨 xhtml 中的 value
属性。
我已将 userN
和 userNameT
更改为 String
,并将它们移至 value
属性。我还在 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>
我在 Java class
中添加了 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");
}
}
}
现在一切正常