通过从外部目录添加 xhtml 文件来扩展 JSF 2.2 应用程序

Extend JSF 2.2 application by adding xhtml files from external directory

我试图通过包含不在上下文根目录中的 xhtml 文件来扩展 JSF 应用程序:

包含点:

<form>
    <ui:repeat value="#{calcBean.resolveIncludes()}" var="curInc">
        <ui:include src="#{curInc}" />
    </ui:repeat>    
</h:form>

CalcBean 交付:

public List<String> resolveIncludes()
{
    final List<String> ret = new ArrayList<>();
    ret.add("D:/extensionDir/inc1.xhtml");
    ret.add("D:/extensionDir/inc2.xhtml");

    return ret;
}

不包括 xhtml 文件的内容,因为根据文档,路径必须是相对于原始 xhtml 的路径。有没有办法做到这一点?目的是通过将一组文件添加到定义的扩展目录而无需重新部署来扩展 JSF 应用程序。

好的,可以了。但不幸的是,在调用 ResourceHandler 之前验证了路径。要将资源标识为 "external dynamic",我必须在其前面加上前缀,例如 "extension_"。在原始示例中:

public List<String> resolveIncludes()
{
    final List<String> ret = new ArrayList<>();
    ret.add("/extension_inc1.xhtml");
    ret.add("/extension_inc2.xhtml");

    return ret;
}

而且我不得不使用 c:forEach 而不是 ui:repeat:

<c:forEach items="#{calcBean.resolveIncludes()}" var="curInc">
    <ui:include src="#{curInc}" />
</c:forEach>