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



我正在尝试将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 多种组合。显然,我怀疑为每种可能性编写有条件渲染或选择的图形图像标签是否是一个优雅的解决方案,因为这只会随着每个额外的组合而变得更加丑陋。我也无法在底层 java 代码中创建这些字符串,因为这会违反分离视图、模型和控制器的想法。

那么最好的解决方案是什么?这似乎是JSF的一个巨大弱点。

考虑在 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可以是具有一堆映射属性的应用程序范围类型。这假设情况相对简单,但该模式适合更复杂的要求。

注意:重复控件应该是命名容器,因此尝试在 VDL 中设置客户端标识符是多余的。请参阅此处了解更多信息。

最新更新