Использование h: outputFormat для форматирования сообщения f: selectItems элемента h: selectOneRadio - PullRequest
0 голосов
/ 18 мая 2010

У меня возникли проблемы с использованием h:selectOneRadio. У меня есть список объектов, который возвращается, который должен быть отображен. Я пытаюсь что-то вроде этого:

<h:selectOneRadio id="selectPlan" layout="pageDirection">
    <f:selectItems value="#{detailsHandler.planList}" />
</h:selectOneRadio>

и planList - это список планов. План определяется как:

public class Plan {
    protected String id;
    protected String partNumber;
    protected String shortName;
    protected String price;
    protected boolean isService;
    protected boolean isOption;  
    //With all getters/setters
}

Текст, который должен отображаться для каждой радиокнопки, фактически находится в файле свойств, и мне нужно вставить параметры в текст, чтобы заполнить некоторое значение в bean-компоненте. Например, текст в моем файле свойств:

plan_price=The price of this plan is {0}.

Я надеялся сделать что-то вроде этого:

<f:selectItems value="<h:outputFormat value="#{i18n.plan_price}">
    <f:param value="#{planHandler.price}">
</h:outputFormat>" />

Обычно, если это не компонент h:selectOneRadio, если это просто текст, я использую h:outputFormat вместе с тегами f:param для отображения сообщений в моем файле .property с именем i18n выше и вставки параметра, который в бобе. здесь это не работает. У кого-нибудь есть идеи, как с этим справиться?

Мне возвращается список планов, каждый из которых имеет свои цены, а отображаемый текст содержится в файле свойств. Любая помощь высоко ценится.

Спасибо!


Теперь я могу решить вышеуказанную проблему, следуя приведенной ниже рекомендации. Но теперь у меня есть другой вопрос. Каждый элемент переключателя должен отображаться так:

Click **here**  to see what is included. The cost is XX.

Теперь выше указано то, что отображается для каждой радиокнопки. «Здесь» должна быть гиперссылка, по которой пользователь может щелкнуть, и должно появиться диалоговое окно с дополнительной информацией. Я могу отобразить предложение выше, но как мне сделать «здесь» кликабельным?

Поскольку вышеприведенное - это то, что отображается, возвращается метка для SelectItem (значение объекта, метка строки).

Любые идеи высоко ценятся.

1 Ответ

1 голос
/ 18 мая 2010

Значение, переданное <f:selectItems /> , должно быть списком или массивом типа javax.faces.model.SelectItem.

Вы можете установить выходную метку в конструкторе SelectItem. Я полагаю, вы можете получить доступ к вашему файлу свойств из бэк-компонента. Метод для получения SelectItems будет выглядеть примерно так:

public List<SelectItem> getPlanItems() {
  List<SelectItem> list = new ArrayList<SelectItem>();
  for (Plan plan : planList) {
    String label = buildPlanPriceLabel(plan.getPrice());
    list.add(new SelectItem(plan, label));
  }
  return list;
}

Оставляя buildPlanPriceLabel в качестве упражнения для читателя.

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