Я использую правильный способ кодирования JSF?

Я новичок в JSF. Могу ли я использовать этот способ кодирования вместо использования EL в представлении JSF? и поправьте меня, если что-то не так в моей кодировке или я должен использовать лучший способ.

@Named
@RequestScoped
public class RegistrationBacking extends Root {
    @EJB
    private UserManagerLocal userManager;
    public String register(){
        Map<String, Object> parameterMap = getRequestMap();
        User user = new User();
        user.setUserName((String) parameterMap.get("userName"));
        user.setPassword((String) parameterMap.get("password"));
        user.setEmail((String) parameterMap.get("email"));
        try{
            userManager.registerUser(user);
        } catch(UserExistsException ex) {
            Logger.getLogger(RegistrationBacking.class.getName()).log(Level.SEVERE, null, ex);
            getContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, getBundle().getString("loginExist"), ex.getMessage()));
            return null;
        } catch(Exception ex) {
            Logger.getLogger(RegistrationBacking.class.getName()).log(Level.SEVERE, null, ex);
            getContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, getBundle().getString("loginError"), ex.getMessage()));
            return null;
        }
        return "index";
    }
}

1 ответ

Решение

Нет. Вы в основном вручную отбираете представленные значения из карты параметров запроса вместо того, чтобы связывать входные значения с моделью. Вы вручную заполняете модель в методе действия контроллера. На этих входах вы не сможете выполнять преобразование и проверку bean-компонентов, управляемые JSF.

Правильный путь заключается в следующем:

<h:form>
    <h:inputText value="#{registrationBacking.user.userName}" />
    <h:inputSecret value="#{registrationBacking.user.password}" />
    <h:inputText value="#{registrationBacking.user.email}" />
    <h:commandButton value="Register" action="#{registrationBacking.register}" />
</h:form>

И тогда в бобе:

private User user;

@PostConstruct
public void init() {
    user = new User();
}

public String register {
    try {
        // ...
    }
}

Смотрите также:

Другие вопросы по тегам