H: проблема с выходным текстом при прохождении атрибутов

У меня есть экран поиска, где я ищу идентификатор клиента, и он потребляет webservice список возвращаемых объектов. Я показываю результаты в datatable.For для определенного поля, у меня есть метод, который предоставляет значение на основе значения ключа в каждой строке переименованного списка. Ключевым значением является идентификатор productID. Я установил это в bean-компоненте с именем output. В методе getCustomerValue я вызываю метод, который предоставляет соответствующее значение, передавая значение "productID". Я использую приведенный ниже код, чтобы сделать то же самое.

Значение будет отображаться правильно при загрузке страницы. У меня есть гиперссылка на той же странице, которая в основном вызывает тот же веб-сервис и отображает одну и ту же страницу. Но на этот раз отображаются все значения, кроме указанного выше значения. Когда я печатаю значение атрибута "item2.customerService.productID" в методе "customervalue", оно отображается как null. Я не уверен, почему это значение не передается.

1 ответ

Вы показываете это в . специфичен для самого компонента, а не для его сгенерированного вывода HTML. оценивается во время создания времени просмотра, а не во время визуализации. На данный момент JSF создает представление, #{item2} отсутствует в области. Он присутствует только в области, когда JSF отображает представление.

Вам нужно искать решение альтернативными средствами. Неясно, какую версию JSF вы используете, но по вашему вопросу вы используете JSF 1.2 (в будущих вопросах, пожалуйста, прямо укажите JSF impl/версию, которую вы используете, в JSF 2.0 многое можно сделать по-другому и намного элегантнее).

Мой ответ на предыдущий вопрос о передаче параметров методу в теге h: outputtext должен быть лучшим ответом на вашу текущую проблему. По-видимому, это не вариант. В этом случае существует как минимум 3 альтернативных способа:

  1. Переместите свойство в класс за #{item2}:

    У вас есть мгновенный доступ к свойству customerservice.

  2. Получите текущий элемент внутри получателя, запрограммировав EL программно:

    public String getCustomervalue() { FacesContext context = FacesContext.getCurrentInstance(); Long productID = context.getApplication().evaluateExpressionGet(context, "#{item2.customerService.productID}", Long.class); // ...
    }

    (Я предполагаю, что productID Long)

  3. Привяжите значение данных к DataModel:

    private DataModel<item2> items;
    </item2>

    с

    а также

    public String getCustomervalue() { Item2 item2 = items.getRowData(); // ...
    }

licensed under cc by-sa 3.0 with attribution.