如何在 JSF 中构建“编辑”按钮并在 h:outputText 和 h:inputText 之间切换
Posted
技术标签:
【中文标题】如何在 JSF 中构建“编辑”按钮并在 h:outputText 和 h:inputText 之间切换【英文标题】:How to build "edit" button in JSF and switch between h:outputText and h:inputText 【发布时间】:2011-10-31 06:44:38 【问题描述】:如何创建一个“编辑”按钮,以便在单击该按钮时将h:outputText
更改为h:inputText
?
【问题讨论】:
【参考方案1】:利用rendered
属性:
<h:outputText value="#bean.entity.property" rendered="#not bean.editmode" />
<h:inputText value="#bean.entity.property" rendered="#bean.editmode" />
...
<h:commandButton value="Edit" action="#bean.edit" rendered="#not bean.editmode" />
<h:commandButton value="Save" action="#bean.save" rendered="#bean.editmode" />
在视图范围的 bean 中使用 this:
private boolean editmode;
public void edit()
editmode = true;
public void save()
entityService.save(entity);
editmode = false;
public boolean isEditmode()
return editmode;
// ...
请注意,由于本答案第 5 点中提到的原因,被视域限定的 bean 很重要:commandButton/commandLink/ajax action/listener method not invoked or input value not updated。
或者,您可以将输入组件上的disabled
属性与CSS 镜头结合使用,这基本上使它看起来像一个输出组件(通过移除边框)。
<h:inputText value="#bean.entity.property" disabled="#not bean.editmode" />
...
<h:commandButton value="Edit" action="#bean.edit" rendered="#not bean.editmode" />
<h:commandButton value="Save" action="#bean.save" rendered="#bean.editmode" />
例如
input[disabled]
border: 0;
同样在这里,bean 必须是视图范围的。另见How to choose the right bean scope?
【讨论】:
以上是关于如何在 JSF 中构建“编辑”按钮并在 h:outputText 和 h:inputText 之间切换的主要内容,如果未能解决你的问题,请参考以下文章
为啥选择浏览器刷新按钮不会将我的 JSF 表单中的已编辑字段替换为来自服务器的值? [复制]
如何等待创建/编辑实体模式窗口完成渲染并在 2sxc 模块中执行我的自定义 js 代码?
JSF 2.0 AJAX:使用 jsf.ajax.request(或其他方式)从 javascript 调用 bean 方法