Используйте идентификатор объекта Java изпредставить - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть классы User.java и Roles.java.

@ManagedBean
public class User implements Serializable{   
    private int id;
    private String username;
    private String password;
    private Role role;

    // getters and setters

    public String register() throws NoSuchAlgorithmException {
        userService.createUser(getUsername(), Util.encryptPassword(getPassword()), getRole().getId());
        return "success";
    }
}

@ManagedBean
public class Role {
    private int id;
    private String roleName;

    // getters and setters

    public List<Role> getAllRoles() {
        return roleService.getAllRoles();
    }
}

В форме, где я хочу создать пользователя, я хочу предоставить имя пользователя, пароль и roleId.В этом случае пользователь не имеет getRoleId (), но getRole (). GetId ().

<h:form id="newUserForm" prependId="false">
    <!-- inputs for username and password -->

    <h:outputLabel  value="Role: * " />  
    <h:selectOneMenu value="#{user.role}" converter="#{userRoleConverter}">
        <f:selectItems value="#{role.getAllRoles()}" var="r"
                           itemLabel="#{r.roleName}" itemValue="#{r.id}" />
    </h:selectOneMenu>

    <h:commandButton type="submit" id="register" value="Register"
                         action="#{user.register}" />
</h:form>

Тело класса "UserRoleConverter.java" выглядит так:

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    if (value == null || value.isEmpty()) {
        return null;
    }

    try {
        return roleService.getRoleById(Integer.valueOf(value));
    } catch (NumberFormatException e) {
        throw new ConverterException(new FacesMessage(String.format("%s is not a valid Role ID", value)), e);
    }
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    if (value == null) {
        return "";
    }

    if (value instanceof Role) {
        return String.valueOf(((Role) value).getId());
    } else {
        throw new ConverterException(new FacesMessage(String.format("%s is not a valid Role", value)));
    }
}

В выпадающем списке роли отображаются правильно.Но после того, как я нажимаю кнопку отправки, код не проходит через метод «register ()», и ничего не происходит.Не исключение брошено.Ожидаемый результат - если я выберу, например, роль «ADMIN» (с ID = 1) и отправлю, то в базу данных будет вставлен пользователь с roleId = 1.

Если я заменим атрибут »Роль роль "с" int roleId "и заменить на целочисленный ввод, программа работает нормально.Но я предпочитаю избегать этого решения.

Я искал принятый ответ на этой странице: Как заполнить опции h: selectOneMenu из базы данных? .Класс UserRoleConverter создается так же, как и UserConverter.java в «Сложный объект как выбранный элемент».

...