2012-02-27 2 views
0

Я учился с JSF даже для слабого, поэтому я очень новичок в этом. Я уже нашел одну «проблему» ... ну, на самом деле это не большая проблема, но еще более косметическая проблема.Исходный JavaScript для ввода форм в JSF

Я создал базовую форму, чтобы зарегистрировать пользователей с некоторыми тегами проверки (см. Код выше). Все работает отлично, но я также хотел бы использовать контроль на стороне клиента через JavaScript. Я уже обнаружил, что могу написать свою собственную функцию проверки JavaScript - но это не то, что я хотел бы иметь. Я уже определил правила валидации в тегах проверки, поэтому я считаю, что глупо писать код вручную, когда такая хорошая структура, как JSF, может делать большую часть этих вещей автоматически. Я также узнал, что Sun намеренно удалило автоопределение JavaScript с JSF.

Итак, мой вопрос: есть ли способ сделать JSF генерировать функции JavaScript (с f: проверять информацию), используя их автоматически на форме submit? Кроме того, я использую PrimeFaces, можно ли добиться этого с помощью PrimeFaces?

Вот код формы я сделал:

<h:form> 
    <table> 
     <tr> 
      <th><label for="registration-email">#{usersTexts.email}:</label></th> 
      <td> 
       <h:inputText value="#{userRegistry.newUser.email}" id="registration-email" validatorMessage="#{msg.invalidEmail}" maxlength="100"> 
        <f:validateRegex pattern="^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$" /> 
       </h:inputText> 
      </td> 
     </tr> 
     <tr> 
      <th><label for="registration-name">#{usersTexts.name}:</label></th> 
      <td> 
       <h:inputText value="#{userRegistry.newUser.name}" id="registration-name" validatorMessage="#{formsTexts.field} #{usersTexts.name} #{msg.isEmpty}" maxlength="100"> 
        <f:validateRequired /> 
       </h:inputText> 
      </td> 
     </tr> 
     <tr> 
      <th><label for="registration-password1">#{usersTexts.password}:</label></th> 
      <td> 
       <h:inputSecret value="#{userRegistry.newUser.password}" binding="#{password}" id="registration-password1" validatorMessage="#{formsTexts.field} #{usersTexts.password} #{msg.isEmpty}"> 
        <f:validateRequired /> 
       </h:inputSecret> 
      </td> 
     </tr> 
     <tr> 
      <th><label for="registration-password2">#{usersTexts.passwordAgain}:</label></th> 
      <td> 
       <h:inputSecret id="registration-password2" validatorMessage="#{msg.passwordsNotEqual}"> 
        <f:validateLength minimum="#{user.MIN_PASSWORD_LENGTH}" /> 
        <f:validator validatorId="equality" /> 
        <f:attribute name="matchAgainst" value="#{password}" /> 
       </h:inputSecret> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2"> 
       <p:captcha immediate="true" validatorMessage="#{msg.wrongCaptcha}" requiredMessage="#{formsTexts.captcha} #{msg.isEmpty}" /> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2" class="submit_row"><h:commandButton value="#{usersTexts.register}" action="#{userRegistry.register}" /></td> 
     </tr> 
    </table> 
</h:form> 

ответ

0

для JSF спецификация не определяет или предложить какую-либо родную проверку JavaScript.

Если все вы хотите мгновенную обратную связь, просто положить

<f:ajax event="blur" render="messages" /> 

внутри полей ввода в вопросе и

<f:ajax execute="@form" render="@form" /> 

внутри командных кнопок.

+0

Это на самом деле не работает ... на отправке Я получаю эту ошибку: malformedXML: Компонент возвратил код ошибки: 0x80004005 (NS_ERROR_FAILURE), а при размытии ничего не происходит. – James

+0

Вы используете '' вместо '' в шаблоне? '' позволяет JSF (и библиотекам компонентов) автоматически включать необходимые файлы CSS/JS. – BalusC

+0

Да, я знаю. На самом деле это было только в шаблоне, а не на конкретной странице, но это не проблема ... попытался добавить туда тоже, и проблема остается. – James

Смежные вопросы