2017-08-11 51 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"); 
     } 
    } 
} 

這一切都精細現在的工作