Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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 编写自定义HtmlResponseWriter JSF_Java_Jsf_Components_Render - Fatal编程技术网

Java 编写自定义HtmlResponseWriter JSF

Java 编写自定义HtmlResponseWriter JSF,java,jsf,components,render,Java,Jsf,Components,Render,对于许多现在不重要的内部问题,我们有一个Servlet过滤器,它可以更改所有结果,即application/xhtml+xml,并重写为text/html;charset=UTF-8,因此即使使用facelets,它在IE 6.0中也不会出现问题 我的问题是关于HtmlResponseWriter的,它是负责渲染的组件。是否有可能扩展它并覆盖它的方法,以实现过滤器的预期效果 内容类型将始终输出为text/html 编码总是UTF-8 脚本标记将被包装在中 提前感谢。是的,我们已经扩展了JSF

对于许多现在不重要的内部问题,我们有一个Servlet过滤器,它可以更改所有结果,即
application/xhtml+xml
,并重写为
text/html;charset=UTF-8
,因此即使使用facelets,它在IE 6.0中也不会出现问题

我的问题是关于HtmlResponseWriter的,它是负责渲染的组件。是否有可能扩展它并覆盖它的方法,以实现过滤器的预期效果

  • 内容类型将始终输出为text/html
  • 编码总是
    UTF-8
  • 脚本标记将被包装在
    <!-->中
提前感谢。

是的,我们已经扩展了JSF(实际上是Oracle ADF)组件,以满足一些无法即时完成的特殊需求。您将需要获取这些渲染的所有源文件,并递归搜索要删除的有问题的HTML,即
应用程序/xhtml+xml
。这只是为了确保它实际上在
HtmlResponseWriter
类中。JSF组件框架可能很复杂,所以您永远不会知道,在其他实例中可能会呈现此标头

由于
HtmlResponseWriter
不像某些组件那样声明为
final
,因此您可以扩展它,并覆盖打印
application/xhtml+xml
faces config.xml
中的方法。唯一的障碍是,如果在需要重写的方法中引用了
HtmlResponseWriter
中声明的私有变量。如果是这种情况,您将无法在重新实现中引用它们,或者必须完全重新构建一个新的
HtmlResponseWriter
类(通过扩展
ResponseWriter
并模拟每个方法和实例变量)。扩展
HTMLResponseWriter
的好处是,您将自动获取对它的任何更改(来自JSF更新)(当然,覆盖方法除外)

更新: 这是我为faces-config.xml所做的,但它使用的是Oracle ADF:

<?xml version="1.0" encoding="windows-1252"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee">
  <application>
    <default-render-kit-id>oracle.adf.rich</default-render-kit-id>
  </application>
  <render-kit>
    <render-kit-id>oracle.adf.rich</render-kit-id>
    <renderer>
      <component-family>org.apache.myfaces.trinidad.Input</component-family>
      <renderer-type>oracle.adf.rich.Text</renderer-type>
      <renderer-class>com.company.jsf.renders.text.CustomRenderer</renderer-class>
    </renderer>
  </render-kit>
</faces-config>

oracle.adf.rich
oracle.adf.rich
org.apache.myfaces.trinidad.Input
oracle.adf.rich.Text
com.company.jsf.renders.text.CustomRenderer
是的,我们已经扩展了JSF(实际上是Oracle ADF)组件,以满足无法立即完成的特殊需求。您将需要获取这些渲染的所有源文件,并递归搜索要删除的有问题的HTML,即
应用程序/xhtml+xml
。这只是为了确保它实际上在
HtmlResponseWriter
类中。JSF组件框架可能很复杂,所以您永远不会知道,在其他实例中可能会呈现此标头

由于
HtmlResponseWriter
不像某些组件那样声明为
final
,因此您可以扩展它,并覆盖打印
application/xhtml+xml
faces config.xml
中的方法。唯一的障碍是,如果在需要重写的方法中引用了
HtmlResponseWriter
中声明的私有变量。如果是这种情况,您将无法在重新实现中引用它们,或者必须完全重新构建一个新的
HtmlResponseWriter
类(通过扩展
ResponseWriter
并模拟每个方法和实例变量)。扩展
HTMLResponseWriter
的好处是,您将自动获取对它的任何更改(来自JSF更新)(当然,覆盖方法除外)

更新: 这是我为faces-config.xml所做的,但它使用的是Oracle ADF:

<?xml version="1.0" encoding="windows-1252"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee">
  <application>
    <default-render-kit-id>oracle.adf.rich</default-render-kit-id>
  </application>
  <render-kit>
    <render-kit-id>oracle.adf.rich</render-kit-id>
    <renderer>
      <component-family>org.apache.myfaces.trinidad.Input</component-family>
      <renderer-type>oracle.adf.rich.Text</renderer-type>
      <renderer-class>com.company.jsf.renders.text.CustomRenderer</renderer-class>
    </renderer>
  </render-kit>
</faces-config>

oracle.adf.rich
oracle.adf.rich
org.apache.myfaces.trinidad.Input
oracle.adf.rich.Text
com.company.jsf.renders.text.CustomRenderer

应用程序/xhtml+xml
究竟从何而来?默认情况下,标准JSF/Facelets不会发出这种消息。为什么不直接修复它而不是覆盖渲染器呢?Hello BalusC,模板包含,在javascript中包含cdata,但是欺骗浏览器(实际上是IE-6)将响应读取为文本/html。因此,所有生成text/html响应的请求都作为application/xhtml+xml提供,但过滤器将其设置为text/html。我会寻找更多信息来更好地回答您的考虑。我只是充当
text/html
,将JS移动到自己的
.JS
文件中,您可以通过
加载该文件。顺便说一句:在评论中使用
@昵称
,比如
@BalusC
,将自动通知特定用户特定的评论。我没有看到你的评论,直到我浏览了这个主题:)ohhh@BalusC抱歉:/,所以我和过滤器后面的一些人聊天,他向我解释说,我们必须像“app/xhtml+xml”一样提供带有CDATA和一些标记的内联js,这就是为什么模板设置为这种内容类型,过滤器将其更改为text/html。所以我的问题依然存在,是否可以覆盖HtmlResponseWriter?是的,但无论如何使用
application/xhtml+xml
是没有意义的。您可以将其设置为
text/html
。它也可以正常工作,并且不需要重写编写器。
application/xhtml+xml
究竟从何而来?默认情况下,标准JSF/Facelets不会发出这种消息。为什么不直接修复它而不是覆盖渲染器呢?Hello BalusC,模板包含,在javascript中包含cdata,但是欺骗浏览器(实际上是IE-6)将响应读取为文本/html。因此,所有生成text/html响应的请求都作为application/xhtml+xml提供,但过滤器将其设置为text/html。我去看看