2017-08-11 49 views
1

我正在从ICEfaces的1.8升级的应用程序ICEfaces的3.3“无法验证组件与空值”的警告时,HtmlInputText组件不是空

运行于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> 

它必然的HtmlInputText组件为用户N和userNameT:

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键,我的所有处理都会正确完成,输入框会被验证和禁用,因此用户标识无法编辑后验证,并且用户名称输入框被选为新的焦点。 然后显示在控制台日志消息指出:如果我离开的用户名框为空和选项卡通过其他所需资料盒

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

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

我已经改变了userNuserNameTString和感动他们到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> 

我已经添加2个新的HtmlInputText组件到Java类

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"); 
     } 
    } 
} 

这一切都精细现在的工作