更改自定义组件的正文内容
Change body content of custom component
我想实现一个自定义 jsf 标签,它将获取开始标签和结束标签之间的文本,对其执行操作,然后 return。例如,
<l:lessInline>
.list-results {
.search-result {
margin-top: 10px;
margin-bottom: 10px;
}
}
</l:lessInline>
我需要这个来获取 <l:lessInline>
的内容并通过 LESS 编译器传递它,然后在 <style>
标签之间呈现它。
我创建了一个 JSF 2.2 FacesComponent,它成功地在 <style>
标签内呈现了 Hello World:
@FacesComponent (value = "inlineLess")
public class InlineLessComponent extends UIComponentBase
{
@Override
public String getFamily ()
{
return "inlineLessComponent";
}
@Override
public void encodeBegin (final FacesContext context) throws IOException
{
final ResponseWriter writer = context.getResponseWriter ();
writer.startElement ("style", this);
writer.write ("Hello World");
writer.endElement ("style");
writer.flush ();
}
}
我想不通的是如何 'read' 然后替换标签内的内容。目前,任何 'inside' 组件标签都保留在渲染元素下方。感谢您的帮助!
正文在 encodeChildren()
期间渲染。只需暂时将响应编写器替换为如下所示的本地缓冲区,这样您就可以在不写入的情况下捕获呈现的输出。
ResponseWriter writer = context.getResponseWriter();
StringWriter output = new StringWriter();
context.setResponseWriter(writer.cloneWithWriter(output));
try {
super.encodeChildren(context);
}
finally {
context.setResponseWriter(writer);
}
String body = output.toString();
// ... Manipulate it here if necessary.
writer.write(manipulatedBody);
我想实现一个自定义 jsf 标签,它将获取开始标签和结束标签之间的文本,对其执行操作,然后 return。例如,
<l:lessInline>
.list-results {
.search-result {
margin-top: 10px;
margin-bottom: 10px;
}
}
</l:lessInline>
我需要这个来获取 <l:lessInline>
的内容并通过 LESS 编译器传递它,然后在 <style>
标签之间呈现它。
我创建了一个 JSF 2.2 FacesComponent,它成功地在 <style>
标签内呈现了 Hello World:
@FacesComponent (value = "inlineLess")
public class InlineLessComponent extends UIComponentBase
{
@Override
public String getFamily ()
{
return "inlineLessComponent";
}
@Override
public void encodeBegin (final FacesContext context) throws IOException
{
final ResponseWriter writer = context.getResponseWriter ();
writer.startElement ("style", this);
writer.write ("Hello World");
writer.endElement ("style");
writer.flush ();
}
}
我想不通的是如何 'read' 然后替换标签内的内容。目前,任何 'inside' 组件标签都保留在渲染元素下方。感谢您的帮助!
正文在 encodeChildren()
期间渲染。只需暂时将响应编写器替换为如下所示的本地缓冲区,这样您就可以在不写入的情况下捕获呈现的输出。
ResponseWriter writer = context.getResponseWriter();
StringWriter output = new StringWriter();
context.setResponseWriter(writer.cloneWithWriter(output));
try {
super.encodeChildren(context);
}
finally {
context.setResponseWriter(writer);
}
String body = output.toString();
// ... Manipulate it here if necessary.
writer.write(manipulatedBody);