【发布时间】:2013-02-17 11:38:09
【问题描述】:
JSF 值绑定是单向的还是双向的?
当我清除我的支持 bean 数据时,视图仍然保留旧值。 这是 JSF 的工作方式吗? 我想知道一种将视图与支持 bean 同步的方法。
【问题讨论】:
JSF 值绑定是单向的还是双向的?
当我清除我的支持 bean 数据时,视图仍然保留旧值。 这是 JSF 的工作方式吗? 我想知道一种将视图与支持 bean 同步的方法。
【问题讨论】:
JSF 做你告诉它做的事情。
为了刷新视图(在对 bean 进行一些更改之后),您需要通过从您的操作方法返回 null/void 来执行 回发到原始视图,或者指定要执行(更新)和稍后呈现(刷新)为 <f:ajax> 标签的属性 附加到应该更改的组件的客户端 ID(或其他可接受的值,如 @form)你的豆子。
【讨论】:
是的,数据绑定是双向的。但是,如果不回答两个关键问题,这意味着什么:
答案是:
这意味着与第一直觉相反: - 像输入这样的组件确实保持它们的状态,并且它与支持 bean 分离。它可以保存很长时间,甚至是多次回发,而无需与支持 bean 进行任何同步(例如,当表单上的任何其他组件无法验证时)。
想象生命周期的最简单方法是:
要点是:
如果您尝试将 JSF 与谷物一起使用,那么使用起来真的很愉快。如果试图违背常规并将 JSF 转变为您对 Web 框架应该如何工作的想法(例如在验证器中使用业务验证、更改转换器内部的模型、从构造函数读取数据库等),您将需要 BalusC 的大量帮助:-)
【讨论】:
不太确定您要问什么,但是是的,如果您的 bean 不是请求范围,它们将使用以前的值填充您的 html 表单控件。
如果您的 bean 是视图范围或会话范围,您仍然可以通过在 bean 的操作方法(commandLink/commanButton 操作)中操作模型值来控制呈现的值
如果您希望在以后访问同一页面时清除这些值,您应该让您的页面 bean 请求范围。
如果您愿意,您可以通过使用绑定而不是值直接对 UIComponents 进行微管理以实现完全控制,从而允许您直接在 bean 中创建和管理 UIComponents。例如
<h:inputText binding="#{bean.inputComponent" /> 并在您的代码中
public class myBean {
private UIInput inputComponent;
public UIComponent getInputComponent() {
// create your UIComponent here, and manage values in your command methods
}
public void setInputComponent(UIComponent component) {
inputComponent = component;
}
}
【讨论】: