JSTL 标签如何在 JSF 2.1 中评估以下内容

2024-01-06

我有下面的 Test.xhtml,我可以在其中选择“海/空”模式。我不想将所有 4 个页面(Page1.xhtml、Page2.xhtml、Page3.xhtml、Page4.xhtml)加载到 jsf 视图树中。在我的场景中,模式一旦选择并保存就无法更改为其他模式。保存的模式将显示为查看模式。因为在任何时候我只需要 2 个文件(Page1.xhtml、Page2.xhtml(或)Page3.xhtml、Page4.xhtml)...我正在使用 JSTL 标记处理程序来动态包含页面。下面的事情工作正常。但我无法理解渲染是如何工作的。

测试.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:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:c="http://java.sun.com/jsp/jstl/core">

<h:head><title>JSF And JSTL</title>
<link href="../css/styles.css" 
      rel="stylesheet" type="text/css"/> 
</h:head>
<h:body>
<div align="center">
<h:form id="form1">

<h:panelGrid  columns="2">
<h:outputLabel value="Select Mode"/>

    <h:selectOneMenu id="selectPageId" value="#{testBean.selectedMode}">
        <f:selectItem itemLabel="Select" />
        <f:selectItem itemLabel="Sea" itemValue="sea" />
        <f:selectItem itemLabel="Air" itemValue="air" />

    <f:ajax execute="@this" render="pageGroup"/>    

    </h:selectOneMenu>


</h:panelGrid>

   <h:panelGroup id="pageGroup">

    <c:if test="#{'sea' eq testBean.selectedMode}">
        <ui:include src="Page1.xhtml" />
        <ui:include src="Page2.xhtml" />
    </c:if>

    <c:if test="#{'air' eq testBean.selectedMode}">
        <ui:include src="Page3.xhtml" />
        <ui:include src="Page4.xhtml" />
    </c:if>
 </h:panelGroup>


</h:form>
</div>
</h:body>
</html>

测试Bean.java

package com.test;


@ManagedBean(name = "testBean")
@ViewScoped 
public class TestBean {

    private String selectedMode;

    public String getSelectedMode() {
        return selectedMode;
    }

    public void setSelectedMode(String selectedMode) {
        this.selectedMode = selectedMode;
    }

}

再次更新

请帮忙澄清以下内容。

当我第一次发送请求访问时Test.xhtml,jsf 视图(UIViewRoot) 被创建。自从testBean.selectedMode默认为 null..此创建的视图将不包含任何组件详细信息<c:if> and <ui:include>哪些在里面<h:panelGroup id="pageGroup">.

之后,当我通过选择模式发送第二个请求(ajax 回发)时sea, the UIViewRoot再次为请求创建恢复视图阶段. While UIViewRoot在恢复视图阶段为此请求创建标签处理程序(<c:xxx>, <f:xxx>, <ui:include>)将被执行。 由于所选值“sea”将更新为 model(TestBean.java) 只有在更新模型值阶段,在恢复视图阶段 EL#{testBean.selectedMode}将被评估为 null。
因此,在我的示例 Test.xhtml 页面中,两个标记处理程序(<c:if test="#{'sea' eq testBean.selectedMode}"> and <c:if test="#{'air' eq testBean.selectedMode}">) 将被评估为 false。所以UIViewRoot不包含任何与内部组件相关的信息<h:panelGroup id="pageGroup">.

尽管UIViewRoot不包含里面的组件信息<h:panelGroup id="pageGroup">, JSF 如何呈现包含的页面(<ui:include src="Page1.xhtml" />,<ui:include src="Page2.xhtml" />) 成功地?

我不确定 JSF 渲染是如何发生的。渲染时,JSF 是否为特定渲染部分重新创建组件树(<h:panelGroup id="pageGroup">).?

Note:当我选择模式为海/空时,该示例工作正常。相应的部分渲染正确。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSTL 标签如何在 JSF 2.1 中评估以下内容 的相关文章

随机推荐

  • 内联 CSS 图像和段落内联

    我无法让我的 div 在同一行上布局图像和段落 我在堆栈溢出和谷歌上搜索了许多主题 但没有解决方案有效 由于网络主机的原因 我必须使用内联 css 来设置网站的样式 相信我 我更愿意使用 css 文件 但由于所选的网络主机而无法这样做 通常
  • 替换换行符以使它们与 jquery 一起使用

    我有以下小脚本来预览一些文本 然后再将其提交到数据库中 jQuery function var input contents preview previewaccordion div viewcontents input keyup fun
  • 在类路径上发现多次出现 org.json.JSONObject:[重复]

    这个问题在这里已经有答案了 我有一个基本的 Spring Boot 2 1 5 RELEASE 应用程序 使用 Spring Initializr JPA 嵌入式 Tomcat Thymeleaf 模板引擎 并打包为可执行 JAR 当我启动
  • 如何以编程方式在反应本机中截取屏幕截图

    如何在 React Native 中截取屏幕截图 我需要截图并将其放入Image成分 我该怎么办 有一个库可以做到这一点 反应本机视图镜头 https github com gre react native view shot import
  • 如何在 Angular 4 材料排序中对日期/时间列进行排序?

    我正在使用角度材料表并使用 matSort 进行排序 但它没有对日期 时间列进行排序 它将日期时间列值作为字符串 如何对 Angular 4 材料中的日期 时间列进行排序 我的 json 看起来像这样 name Rule Test 5 ti
  • 如何调试配置 django 以使用 apache 和 mod-wsgi 提供服务的基本问题?

    人们在设置 django 以由 apache 和 mod wsgi 提供服务时遇到困难是很常见的 常见的症状是 导入错误 由于某种原因 通常在每种情况下略有不同 settings py 或类似的文件无法导入 有关众多示例 请参阅本页右栏中的
  • C 编程语言,第 1 章练习 1.10(Getchar 和 Putchar)

    我已经为此工作了 2 个小时 但我被困住了 我在网上找到了答案 但这并不能帮助我学习我显然缺少的概念 Prompt 编写一个程序将其输入复制到输出 将每个选项卡替换为 t 每个退格键 b 以及每个反斜杠 这使得制表符和退格键以明确的方式可见
  • Python 中断言的使用示例?

    我已经读过有关何时使用断言与异常的信息 但我仍然没有 明白 似乎每当我认为我处于应该使用断言的情况时 在后来的开发中我发现我 三思而后行 以确保当我调用函数时断言不会失败 由于还有另一个 Python 习惯用法 即更喜欢使用 try exc
  • 在运行时创建TabView?

    我需要使用 java 代码在运行时创建选项卡视图 笔记 不使用xml设计 在 XML 中创建 TabHost TabWidget 然后在运行时添加 TAbHost TabSpec
  • 如何创建 C 头文件 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望能够在头文件中创建一组函数 我可以将其 include 到我的一个 C 程序中 打开您最喜欢的文本编辑器 创建一个名为whate
  • 带有 Spring 缓存和咖啡因的 Spring 云网关

    我有一个 Spring Cloud 网关 它将 API 剩余请求转发到一些微服务 我想缓存特定请求的响应 为此我写了这个过滤器 Component Slf4j public class CacheResponseGatewayFilterF
  • 在 chrome 扩展中正确使用 execcommand("paste")

    我正在尝试使用以下命令将剪贴板数据粘贴到文本区域中execcommand paste 带有 chrome 扩展 但我似乎无法让它工作 权限已设置 我尝试过设置focus 在文本区域上 但是document execCommand paste
  • numpy 数组之间的“in”运算符的含义是什么?

    我注意到in可以在 numpy 数组之间使用 然而 它的含义可能有点违反直觉 import numpy as np np array 0 in np array 1 2 False np array 0 in np array 0 1 Tr
  • 如何使用 iDangerous Swiper 和 jquery .click();同时

    我坚持以下几点 我正在使用 iDangerous Swiper 插件 效果很好 但是 我还想在同一个 iDangerous swiper 上使用 jQuery 的单击功能 例如 div div class swiper slide lots
  • 如何使用 LINQ 查找并删除集合中的重复对象?

    我有一个代表对象的简单类 它有 5 个属性 一个日期 两个小数 一个整数和一个字符串 我有一个集合类 源自CollectionBase 这是一个容器类 用于保存我的第一个类中的多个对象 我的问题是 我想删除重复的对象 例如具有相同日期 相同
  • 如何对 IBM Cloud 数据库进行按需备份

    我在 IBM Cloud 中有一个 Elasticsearch 部署 我想从中定期进行按需备份 有没有办法使用命令行启动备份 IBM Cloud 数据库每天定期备份其所有数据库 但您无法选择备份计划 如果您想更频繁地创建备份或继续创建备份
  • 我应该对 Asp.NET Web-api 路由使用 RouteParameter 还是 UrlParameter?

    我见过两者都被使用 所以我想知道 它们做相同的事情还是不同的事情 如果是后者 有什么区别呢 我尝试通过查看 Visual Studio MVC 4 rc Web api 模板来自己回答这个问题 但遗憾的是它同时使用了两者 所以我的困惑仍然存
  • React context - 'contextType' 未定义

    我在用 电子邮件受保护 cdn cgi l email protection and 电子邮件受保护 cdn cgi l email protection应该支持反应Context并尝试运行一个与以下相同的简单示例反应上下文 https r
  • 如何更改 Vob 所有者和 Vob 组?

    我尝试更改 vob 所有者和 vob 组 它会抛出如下错误 Error No ClearCase group found Error unknown protection styles 您可以查看技术说明 关于在 Windows 上更改 V
  • JSTL 标签如何在 JSF 2.1 中评估以下内容

    我有下面的 Test xhtml 我可以在其中选择 海 空 模式 我不想将所有 4 个页面 Page1 xhtml Page2 xhtml Page3 xhtml Page4 xhtml 加载到 jsf 视图树中 在我的场景中 模式一旦选择