我们有一个 JSF2 Facelets 模板实现,它为整个企业的应用程序提供 HTML“包装器”。应用程序部署在 WAS 7 上,并通过共享库调用我们的 Facelets 模板。
我们有一个请求,通过外部 Web 服务器的 xhtml 文件拉入左侧导航 - 这需要通过我们的代理。由于包含的 xhtml 文件不会在 Web 项目中(它将被单独管理并位于 Web 服务器上) - 我正在尝试找到一种方法来通过代理拉入代码并使其正确呈现。由于代理,使用 不起作用。
我编写了一个简单的 bean 来设置代理配置并提取文件的内容。如果我使用 ResponseWriter 输出代码——标签不会在 HTML 输出中呈现:
<div class="aligncenter"> <a href="#"> <img src="/allweb/images/corporate/pcom/logout.gif" alt="Logout" width="138" height="30" /></a> </div>
<mycom:navBlockHeader type="custom" title="TPA Nav Pilot" />
<mycom:divStart expandableNav="true"/>
<mycom:navLink href="url" text="Link 1" />
<mycom:navSubLinkStart text="Link 2" href="#" expandable="true" expand_onload="true"/>
<mycom:navLink href="url" text="Link a"/>
<mycom:navLink href="url" text="Link b"/>
<mycom:navLink href="url" text="Link c"/>
<mycom:navSubLinkEnd/>
<mycom:navLink href="url" text="Link 3"/>
<mycom:divEnd />
我通过自定义标签调用托管 bean:<mycom:tpaLeftNav/>
主要的托管bean代码是:
public class LeftNavIncludeProxy extends UIComponentBase {
public void encodeBegin(FacesContext context) throws IOException{
ResponseWriter writer = context.getResponseWriter();
String include = "";
System.setProperty("https.proxyHost", "proxy.mycompany.com");
System.setProperty("https.proxyPort", "80");
try{
URL url = new URL("https://secure.mycompany.com/navigation/tpa/leftnav/leftnav-define.xhtml");
BufferedReader bin = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = bin.readLine()) !=null){
include += line;
}
include=include.toString();
writer.write((String) include);
}
catch (Exception e){
e.printStackTrace();
}
}
}
我可以轻松地检索 leftnav.xhtml 文件的内容——但是当我尝试将它写回 Facelets 模板时——它不会将 Facelets 标记呈现为 HTML。感觉就像我错过了渲染步骤,但我不确定如何轻松解决这个问题。
我确定这是一个初学者的问题 - 如果是,我很抱歉 - 我将不胜感激有关如何解决此问题的任何建议或想法。
谢谢。梅尔