【发布时间】:2013-07-08 09:06:31
【问题描述】:
我正在使用javax.faces.render.Renderer 类来呈现我的自定义组件。我覆盖 encodeBegin 或 encodeEnd 以实现我想要的输出。
我想知道什么时候应该使用这两种方法?关于何时应该使用encodeBegin 和encodeEnd 是否有任何指导方针?
【问题讨论】:
我正在使用javax.faces.render.Renderer 类来呈现我的自定义组件。我覆盖 encodeBegin 或 encodeEnd 以实现我想要的输出。
我想知道什么时候应该使用这两种方法?关于何时应该使用encodeBegin 和encodeEnd 是否有任何指导方针?
【问题讨论】:
这取决于组件树的层次结构。关键是,你期待孩子吗?当有孩子时,您希望编码后的输出看起来如何?
通常,如果您想在子级编码之前对输出进行编码,您可以使用encodeBegin()。例如。一个开始标签,如 HTML <div>。通常,如果要在子项编码后对输出进行编码,则使用encodeEnd()。例如。一个结束标记,如 HTML </div>。或者可能是一个额外的<script>,它应该适用于之前生成的<div>。
【讨论】:
<div><span>span text</span>div text</div>这样的HTML?但这甚至可以在encodeBegin 或encodeEnd 的单一方法中生成。如果我理解正确,请告诉我。
<your:component><other:childA/><other:childB/></your:component>。现在有意义吗?你不应该关心孩子的实际编码。他们都是自己做的。但是使用encodeBegin(),您可以在子级编码之前控制输出,然后使用encodeEnd() 控制输出。