【问题标题】:Displaying read-only forms (values are shown as text instead of disabled input controls) with JSF?使用 JSF 显示只读表单(值显示为文本而不是禁用的输入控件)?
【发布时间】:2012-01-07 07:29:34
【问题描述】:

我有一个数据输入表单,用户可以在其中输入大量数据。当用户进入页面查看现有数据时,页面应以只读模式显示(所有值显示为文本),当他单击“编辑”按钮时,应显示带有所有输入控件的普通表单,以便用户可以更改和保存数据。

我们正在使用带有 PrimeFaces 库的 JSF 2.0。对于文本框和文本区域很容易实现上述行为,但对于 Checkbox、多选、单选、......控件则不然。是否有任何简单的方法可以实现上述行为,而不是编写我们自己的代码(这可能会遇到很多行,从而使支持 bean 代码变得丑陋)

感谢您的帮助...

【问题讨论】:

    标签: jsf uiview readonly


    【解决方案1】:

    我不确定您为什么认为您需要额外的支持 bean 代码。您已经在支持 bean 中拥有了所有需要的值。您的问题更多在于这些价值观的呈现。只需通过相应地编写视图代码以所需的格式显示它们。也许你想得太难了。

    您可以显示例如“是”或“否”值,而不是选择布尔复选框。

    <h:selectBooleanCheckbox value="#{bean.checked}" rendered="#{bean.edit}" />
    <h:outputText value="#{bean.checked ? 'Yes' : 'No'}" rendered="#{not bean.edit}" />
    

    您可以只在输出文本中显示值,而不是选择一个菜单/收音机。

    <h:selectOneMenu value="#{bean.selectedItem}" rendered="#{bean.edit}">
        <f:selectItems value="#{data.availableItems}" />
    </h:selectOneMenu>
    <h:outputText value="#{bean.selectedItem}" rendered="#{not bean.edit}" />
    

    您可以只显示循环中以逗号分隔的所有值,而不是选择多个列表框/复选框。

    <h:selectManyListbox value="#{bean.selectedItems}" rendered="#{bean.edit}">
        <f:selectItems value="#{data.availableItems}" />
    </h:selectManyListbox>
    <h:panelGroup rendered="#{not bean.edit}">
        <ui:repeat value="#{bean.selectedItems}" var="selectedItem" varStatus="loop">
            #{selectedItem}#{not loop.last ? ', ' : ''}
        </ui:repeat>
    </h:panelGroup>
    

    您可以将其全部包装在一个标记文件或复合文件中,以最大限度地减少样板和代码重复。

    【讨论】:

    • 当控件的标签不等于它的值时,就不是那么直截了当。
    • 例如,对于一个选择布尔复选框,显示给用户的值为“男”和“女”。在选择时,“M”或“F”将根据用户的选择存储在数据库中。在这种情况下,在查看模式下,要显示“男性”或“女性”,必须编写额外的支持 bean 代码来将数据库值转换为用户可呈现的文本。其他控件的问题也是如此。要使上述方法起作用,控件的标签必须等于值,但在大多数情况下不会如此。如果我遗漏了什么,请告诉我。
    • &lt;f:selectItems&gt; 后面的数据中已有这些值。只需相应地访问和打印它们。以后只需像您在评论中所做的那样直接提出问题即可。
    【解决方案2】:

    我在上一个项目中使用具有“预览”属性的复合组件完成了此操作,并且在实现中,当该属性为真时呈现文本,当属性为假时呈现真实(编辑)。对于预览模式下的复选框,您可以显示复选框本身但禁用,对于单选 - 显示所选项目。

    MyFaces Tomahawk 库 [1] 包含标准组件的扩展版本,为此添加了 displayValueOnly 属性。这可能会对你有所帮助(我没有使用过)。

    [1] - http://myfaces.apache.org/tomahawk-project/tomahawk20/index.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 2013-03-03
      • 2014-10-24
      相关资源
      最近更新 更多