使用 JSF 显示只读表单(值显示为文本而不是禁用的输入控件)?

发布于 2024-12-25 04:06:44 字数 270 浏览 0 评论 0原文

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

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

感谢您的帮助...

I have a data entry form where user enters lots of data. When user comes to the page to view existing data, the page should be displayed in read-only mode (all values shown as text), when he clicks 'Edit' button, normal form with all input controls should be shown so that user can change and save data.

We are using JSF 2.0 with PrimeFaces library. It is easy to achieve above behavior for text box and text area but not for Checkbox, multi-select, radio,..... controls. Is there any easy way available to achieve above behavior rather than writing our own code (which may run into lot of lines thus making backing bean code ugly)

Thanks for your help...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

澜川若宁 2025-01-01 04:06:44

我不知道为什么你认为你需要额外的支持 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>

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

I'm not sure why you think that you need additional backing bean code for this. You've all the needed values in the backing bean already. Your problem is more in the presentation of those values. Just display them in the desired format by writing the view code accordingly. Perhaps you were thinking it too the hard way.

Instead of a select boolean checkbox, you could display for example a "Yes" or "No" value.

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

Instead of a select one menu/radio, you could just display the value in an output text.

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

Instead of a select many listbox/checkbox, you could just display for example all values comma separated in a loop.

<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>

You could wrap it all in a tag file or a composite to minimize boilerplate and code repetition.

冰雪之触 2025-01-01 04:06:44

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

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

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

I've done this in my last project using composite components which has a "preview" attribute and in the implementation I render a text when this attribute is true and the real (editing) when the attribute is false. For checkbox in preview mode you could show the checkbox itself but disabled, for radio - show the selected item.

MyFaces Tomahawk library [1] contains an extended version of the standard components that adds displayValueOnly attribute for this purpose. This might help you (I haven't used them).

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文