2014-12-04 6 views
1

Когда я пытаюсь отправить форму, входное значение присутствует в методе валидации, но ушло в метод submit. Почему свойство ввода пустоты к моменту достижения программой функции submit?Значение формы JSF исчезает при отправке

Входной сигнал: ASDF


genres.xhtml

<h:form> 
    <h:inputText 
     id="userGenre" 
     value="#{genres.input}" 
     validator="#{genres.validateLength}" 
     required="true" size="3" 
     /> 
    <h:commandButton 
     value="Add genre" 
     action="#{genres.submit}" 
     /> 
    <h:message for="userGenre" /> 
</h:form> 


Genres.java

@Named 
@SessionScoped 
public class Genres { 

    static final Logger LOG = LoggerFactory.getLogger(Genres.class); 

    private String input = ""; 

    public void validateLength(FacesContext context, UIComponent toValidate, Object value) { 
     LOG.info("Validating"); 

     input = (String) value; 
     LOG.info("name:"+input); // result: "name:asdf" 

     int min = 3; 
     int max = 15; 
     int len = input.length(); 
     if (len < min || len > max) { 
      ((UIInput) toValidate).setValid(false); 
      FacesMessage message = new FacesMessage("Must be at least 3 and at most 15 characters."); 
      context.addMessage(toValidate.getClientId(context), message); 
      return; 
     } 
    } 

    public void submit() { 
     LOG.info("Submitting"); 
     LOG.info("name:"+input); // result: "name:" 

     // process input 
    } 

    public String getInput() { 
     return input; 
    } 

    public void setInput(String input) { 
     this.input = input; 
    } 

} 


лица-config.xml

<managed-bean> 
    <managed-bean-name>genres</managed-bean-name> 
    <managed-bean-class>no.krystah.Genres</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
    <managed-property> 
     <property-name>input</property-name> 
     <property-class>java.lang.String</property-class> 
     <value/> 
    </managed-property> 
</managed-bean> 

ответ

1

в #{genres.submit} при попытке представить то JSF создаст новый экземпляр ваших Жанров класса так входа пустой, но если вы используете @ManagedBean аннотация в верхней части вашего Жанры класс Я думаю, что код должен хорошо работать

+0

Это имело бы смысл, потому что независимо от того, что инициализирую поле ввода «с» (в этом коде, Я использую «») - это то, что будет отправлено при подаче. Однако добавление аннотации @ManagedBean, к сожалению, не помогло ... – krystah

+1

Я беру это обратно. Добавление ManagedBean в одиночку не сработало, но если я также удалил @Named, он сработал. Спасибо. :) – krystah

+0

Добро пожаловать, рад видеть, что ваша проблема решена – jfun