JSF 2 - динамически добавленные идентификаторы компонентов не сохраняются при обратной передаче - PullRequest
0 голосов
/ 28 февраля 2012

У меня есть аспект внутри компонента, внутри которого я динамически добавляю компоненты, используя

    UIComponent c = new UICustomComponent();
    c.setId("someIdGeneratedDynamically");
    facet.getChildren().add(c);

Но при обратной передаче, когда я перебираю этот список, я понимаю, что компоненты присутствуют, но их идентификаторы отличаются отте, которые я указал ранее.(более конкретно, эти идентификаторы имеют форму "j_id9, j_id10" и т. д.)

Я отладил немного кода в StateManagementStrategyImpl и понял, что они намеренно не сохраняют идентификаторы компонентов при сохранении представления.

Мой вопрос: почему JSF не хранит идентификатор компонента?

1 Ответ

1 голос
/ 28 февраля 2012

Чтобы ответить на ваш вопрос, указанный в конце: на этапе RestoreView JSF перестраивает запрошенное представление из файла (ов) шаблона. Предполагается, что компоненты всегда получают одинаковые идентификаторы, пока шаблоны не меняются. Состояние сохраняется с использованием clientIds в качестве ключей. Если вы изменили clientId программно, было бы невозможно правильно восстановить состояние: воссозданный компонент будет иметь исходный идентификатор, а его состояние будет сохранено под другим (измененным) идентификатором. Вот почему он не «хранит» clientId, он должен оставаться постоянным и позволяет сопоставлять воссозданный компонент с его состоянием из предыдущего запроса.

Я считаю, что это поведение относится только к компонентам, созданным из шаблонов. JSF имеет специальный механизм для обработки программно добавленных компонентов, и я ожидаю, что этот механизм будет работать с clientIds, как и ожидалось.

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