Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSF页面的编码和解码_Java_Jsf_Jakarta Ee - Fatal编程技术网

Java JSF页面的编码和解码

Java JSF页面的编码和解码,java,jsf,jakarta-ee,Java,Jsf,Jakarta Ee,我正在阅读,我有一个关于JSF页面编码和解码的问题 当页面即将呈现时,它将首先通过包含JSF标记的XHTML页面。每个JSF标记都有一个自己的标记处理程序类,它们相互协作,形成该页面的组件树。忽略所有其他标记 每个组件都有自己的渲染器,它知道如何生成HTML。现在这本书说: (这是一个h:inputText标签) 每个组件都有一个渲染器,该渲染器生成HTML输出,反映组件状态。UIInput对象的呈现程序要求JSF实现查找唯一ID和表达式user.name的当前值 问题是: 为什么书中说实现要求

我正在阅读,我有一个关于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
    发出标记。