相关疑难解决方法(0)

一个ui:include如果找不到文件,则不会抛出错误

我正在使用JSF 2.

对于其中一个页面,它需要包含以下行的页面:

domain/subdomain/cms/[userspecified_code].html
Run Code Online (Sandbox Code Playgroud)

我用ui:include标签来获取这个文件.它适用于存在的文件,但对于不存在的文件,它会抛出FileNotFoundException,将整个页面呈现为错误页面.

是否有一个替代解决方案ui:include标签跳过/记录文件错误,只显示一个空的部分?这样可以最大限度地减少对用户的干扰(包含的文件只是页面的一小部分,如果没有匹配的文件,我宁愿不显示任何内容).我能想到的一种方法是加载ajax部分,所以如果出现错误,它将是一个javascript错误而不是一个服务器错误,但是有更优雅/更简单的方法吗?

这是我目前拥有的xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
   xmlns:ui="http://java.sun.com/jsf/facelets"
   xmlns:h="http://java.sun.com/jsf/html">

Lots of other html....

<ui:include src="domain/subdomain/cms/#{userspecified_code}.html"/>

Lots of other html....

</html>
Run Code Online (Sandbox Code Playgroud)

编辑

嗨,大家好,谢谢你的所有答案.我正在寻找一种不需要我自己添加所有文件检查逻辑的解决方案.

html java xhtml jsf-2

3
推荐指数
1
解决办法
1245
查看次数

我应该使用 ui:fragment 和 render 属性来有条件地在带有 JSF 2.2 的 Facelets 中呈现 HTML 标签吗?

我正在将旧项目从 JSF 1.1 升级到 JSF 2.2。具体来说,我将 JSF 实现从 MyFaces 1.1 升级到 MyFaces 2.2.12,用 Facelets 替换 JSP 并升级/替换过时的标签库。我主要使用从 JSF 1.2 迁移到 JSF 2.0作为指南。

该项目使用了一些在其 JSP 页面中htmLib使用命名空间调用的标记库http://jsftutorials.net/htmLib。我再也找不到关于这个标签库的任何文档,无论是在 jsftutorials 网页还是其他地方,但显然它被用来包含像JSP 页面<div><table>在 JSP 页面中的纯 HTML 标签。

由于现在可以在带有 JSF2 的 XML Facelets 中使用纯 HTML 标记,因此我现在正在从htmLibtaglib 中删除所有出现的标记,<htm:div>...</htm:div>例如<div>...</div>.

但是,从使用的一些标签htmLib包含render用于条件渲染的属性,如下所示:

<htmLib:h4 render="someCondition">
   ...
</htmLib:h4>
Run Code Online (Sandbox Code Playgroud)

因为纯 HTML 标签没有render用于此目的的属性,所以我正在寻找一种有条件地呈现纯 HTML 标签的替代方法,并在 SO 上偶然发现了这个答案:如何有条件地呈现像 <div> 这样的纯 HTML 元素? …

jsf facelets taglib jsf-2.2

3
推荐指数
1
解决办法
2807
查看次数

JSF ui:包括未正确呈现

我正在使用JSF 2.1.8实现一个Web应用程序,我遇到了ui:include标记的问题.我有这个代码

<h:panelGroup id="panelContenido">

        <ui:fragment rendered="#{!empty navigationManagerSystem._Navegable}">
            <ui:include src="#{navigationManagerSystem._Navegable._IncludePath}" />

        </ui:fragment>
        <ui:fragment rendered="#{empty navigationManagerSystem._Navegable}">
            <ui:include src="/system/navigation/error.xhtml" />
        </ui:fragment>
    </h:panelGroup>
Run Code Online (Sandbox Code Playgroud)

navigationManagerSystem bean被JSF会话管理,在这一段代码首先呈现的,它应该是显示包括路径内容.如果我按照这样的常量执行此操作,<ui:include /system/home/index.xhtml" />但是如果我将它放在变量中则不行,即使我已经看到变量在屏幕打印之前保持该值.我不知道它是否能与持有/system/home/index.xhtml页豆,这是有关视图作用域.

无论如何,如果我在页面渲染后立即刷新页面,则正确包含xthml.顺便说一句,我已经简化了要包含的页面,以便没有任何jstl标签,因为我知道它们可能会导致View Scope出现问题.

有什么想法吗?

java facelets jsf-2

1
推荐指数
1
解决办法
4139
查看次数

标签 统计

facelets ×2

java ×2

jsf-2 ×2

html ×1

jsf ×1

jsf-2.2 ×1

taglib ×1

xhtml ×1