Java JSF页面的编码和解码
我正在阅读,我有一个关于JSF页面编码和解码的问题 当页面即将呈现时,它将首先通过包含JSF标记的XHTML页面。每个JSF标记都有一个自己的标记处理程序类,它们相互协作,形成该页面的组件树。忽略所有其他标记 每个组件都有自己的渲染器,它知道如何生成HTML。现在这本书说: (这是一个h:inputText标签) 每个组件都有一个渲染器,该渲染器生成HTML输出,反映组件状态。UIInput对象的呈现程序要求JSF实现查找唯一ID和表达式user.name的当前值 问题是: 为什么书中说实现要求表达式的当前值Java JSF页面的编码和解码,java,jsf,jakarta-ee,Java,Jsf,Jakarta Ee,我正在阅读,我有一个关于JSF页面编码和解码的问题 当页面即将呈现时,它将首先通过包含JSF标记的XHTML页面。每个JSF标记都有一个自己的标记处理程序类,它们相互协作,形成该页面的组件树。忽略所有其他标记 每个组件都有自己的渲染器,它知道如何生成HTML。现在这本书说: (这是一个h:inputText标签) 每个组件都有一个渲染器,该渲染器生成HTML输出,反映组件状态。UIInput对象的呈现程序要求JSF实现查找唯一ID和表达式user.name的当前值 问题是: 为什么书中说实现要求
user.name
?我希望实现会询问组件——在本例中是UIInput
——哪个组件引用了这个用户bean?因为,这个类不是在代码中“反映”了JSF标记吗
我可能误解了这个概念,我想学习它 传递给JSF组件的参数基本上都是EL(表达式语言)表达式,评估这些表达式可能比访问一些引用要复杂得多——JSF EL是一个简单的工具,语法和语义只与Java间接相关 我希望实现会转而询问组件 在我看来,
UIInput
组件和bean的属性是两个不同的东西。在我们将UIInput
组件的value
属性绑定到bean的属性之前,它们之间没有任何关系
换句话说,UIInput
组件本身没有所谓的当前值。它们只是一个值显示器和获取器。因此,渲染器必须向JSF实现(通常是ManagedBean
)询问UIInput
组件应该显示的值
。。。UIInput—它对这个用户bean有一些引用
一般来说,UIInput
、属性和JSF实现(ManagedBean
)之间的关系应该是这样的:UIInput
-ManagedBean
-bean属性。渲染器需要与中间人进行通信(<代码>管理bean < /代码>)以获得它想要的东西,因为<代码> UIPENT/<代码>与bean的属性没有直接关系。
以上是我目前的理解。如果我错了,请纠正我!:) 为了获得类似的
UIInput
的输出值,呈现程序通常会调用getValue()
。这通常会返回:
如果输入验证或转换失败,则来自getSubmittedValue()
的值
通过调用setValue(object)
明确设置的对象(如果有)
值的结果
如果有
该组件定义行为。理想情况下,它应该与渲染器、标记和数据源松散耦合。组件不关心它的数据源是什么——它不必是托管bean。获取和设置值是ValueExpression
的责任
ValueExpression
的计算结果取决于。好的,还有一个问题:解码面发生在ApplyRequestVariables生命周期阶段右侧,而编码在RenderResponse中?是的。在应用请求值期间,Renderer.decode
将读取输入(通常来自参数映射)并调用组件上的setSubmittedValue(对象)
。在渲染响应期间,调用Renderer.encode*(…)
方法,通过ResponseWriter
发出标记。