使用h:outputFormat来消息格式化h:selectOneRadio的f:selectItems

时间:2010-05-17 20:59:43

标签: jsf formatting

我在使用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
}

每个单选按钮必须出现的文本实际上是在属性文件中,我需要在文本中插入params以填充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:outputFormatf:param标记来显示名为{{.property文件的邮件1}}上面,并插入一个在辅助bean中的参数。这里不起作用。有没有人有任何想法我怎么处理这个?

我将返回一份计划清单,每个计划都有自己的价格,要显示的文本保存在属性文件中。任何帮助非常感谢。

谢谢!


我现在可以按照以下建议解决上述问题。但现在我有另一个问题。 每个单选按钮项必须显示如下:

i18n

现在以上是每个单选按钮显示的内容。 “here”需要是一个用户可以点击的超链接,并且应该显示一个包含更多信息的对话框。我可以显示上面的句子但是如何使“here”可点击?

由于以上是显示的内容,因此返回的是SelectItem(对象值,字符串标签)的标签。

任何想法都非常感激。

1 个答案:

答案 0 :(得分:1)

传递给<f:selectItems /> 的值必须javax.faces.model.SelectItem类型的列表或数组。

您可以在SelectItem的构造函数中设置输出标签。我想你可以从支持bean访问你的属性文件。获取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作为读者的练习。