JSF中的条件字符串连接/构建

时间:2012-05-05 18:44:18

标签: jsf web conditional-statements

我正在尝试将JSP页面转换为JSF(不允许使用JSP代码),但偶然发现了一个问题。 注意:这是学术性的,所以没有“脏”的解决方案。

我有jsp代码,根据各种条件设置图像的图像源和替代文本。有连接和切换条件。这是一个循环。

现在,我可以重现遍历所有值的循环,如下所示:

  <ui:repeat value="#{gameapi.game.fieldsList}" var="field">                                          
     <h:graphicImage id="field#{field.fieldNr}" styleClass="field#{field.fieldNr}" 
                                                            url="..." alt="" title=""/>                                          
  </ui:repeat>

但是,图片网址和替代文字共有20多种组合。显然,我怀疑为每种可能性编写一个有条件渲染或选择的graphicImage标签是一个优雅的解决方案,因为这只会使每个额外的组合变得更加丑陋。 我也无法在底层java代码中创建这些字符串,因为这会违反分离视图,模型和控制器的想法。

那么这样做的最佳解决方案是什么?这似乎是JSF的巨大弱点。

1 个答案:

答案 0 :(得分:1)

考虑使用MVVM模式的变体。您可以拥有专用于查看与业务逻辑托管bean分离的逻辑的托管bean。

<ui:repeat value="#{bizBean.list}" var="_row">
  <h:graphicImage
    url="#{viewModelBean.images[_row.outcome]}"
    alt="#{viewModelBean.alts[_row.outcome]}"
    title="#{viewModelBean.titles[_row.outcome]}" />
</ui:repeat>

viewModelBean可以是具有一堆地图属性的应用程序范围类型。这假设一个相对简单的情况,但该模式适合更复杂的要求。

注意:重复控件应为NamingContainer,因此尝试在VDL中设置client identifier是多余的。有关详情,请参阅here