Значение недопустимо при использовании набора записей - PullRequest
0 голосов
/ 28 июня 2019

Эта проблема возникла, когда я попытался использовать LinkedHashMap для сохранения записей из базы данных.Я не знаю, в какой степени работает код XHTML, но внешне выглядит хорошо.

Проблема в этой части xhtml:

    <tbody>
        <tr>
            <td>Movie:</td>

            <!--td>
                <h:selectOneMenu id="foundmovieid" value="#{webRental.idmovie}">
                    <f:selectItems id="movieid" value="#{webMovie.get_all_movies()}"></f:selectItems>
                </h:selectOneMenu>
            </td-->

            <td>
                <h:selectOneMenu value="#{webRental.idmovie}">
                    <f:selectItems value="#{webMovie.availableMovies.entrySet()}" var="entry"
                                   itemValue="#{entry.key}" itemLabel="#{entry.value}" />
                </h:selectOneMenu>
            </td>

        </tr>
    </tbody>
</table>
<h:commandButton value="Submit" action="#{webRental.save()}"></h:commandButton>

Вот WebRental.java:

public class WebRental {

    @EJB
    private RentalsFacade rf;

    private String iduser;
    private String idmovie;

    //getters and setters

    public List<Rentals> get_all_rents() {
        return rf.findAll();
    }

    public void save() {
        try {
            rf.Save(iduser, idmovie);
        } catch (Exception e) {
        }
    }
}

и WebMovie.java, чья MoviesFacade имеетEntityManager и способ сохранения новых pbject Movies (идентификатор, заголовок, имя и длина режиссера):

@Named
@RequestScoped
public class WebMovie {

    @EJB
    private MoviesFacade mf;

    private String id;
    private String title;
    private String director;
    private int length;

    private Map<String, String> availableMovies;

    //geters and setters

    public List<Movies> get_all_movies() {

        availableMovies = new LinkedHashMap<>();
        List<Movies> found = mf.findAll();

        found.forEach((m) -> {
            String first = m.getId();
            String second = m.getTitle() + ", " + m.getDirector() + ", " + m.getLength() + " minutes.";
            availableMovies.put(first,second);
        });

        return mf.findAll();
    }

    public void save() {
        try {
            mf.Save(id, title, director, length);
        } catch (Exception e) {
        }
    }
}

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

Чтобы решить эту проблему, нужно ли использовать «конвертеры»?Если да, то как мне это реализовать?Если нет, то в чем моя ошибка?

Кроме того, в приглушенном разделе есть вызов "get_all_movies ()", но, поскольку он отключен, он не должен вызываться.Как мне вызвать эту функцию за пределами этого приглушенного раздела, чтобы я мог удалить весь раздел после того, как получил SelectOneMenu с работающей картой?

1 Ответ

0 голосов
/ 01 июля 2019

Оказывается, используя Карты очень странно ... Как я решил это, удалив большинство элементов SelectItems так, чтобы они просто были:

<f:selectItems value="#{webMovie.availableMovies}" />

А затем измените способ вставки всего на карту следующим образом:

@PostConstruct
public void init() {
    availableMovies = new HashMap<>();

    mf.findAll().forEach((m) -> {
        availableMovies.put((String) m.getTitle() + ", " + m.getDirector() + ", " + m.getLength() + " minutes.",(String) m.getId());
    });
    //Turns out that, for the selectItems to read properly the map, you have to insert the text you want to be displayed as the key, and then the value as value. I was doing it backwards.
}

Таким образом, мне не нужно зависеть от раздела! -, который вызывает get_all_movies (), и я могу удалить его!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...