在jspx页面常用的jsf tag

本文详细介绍了 JSF (JavaServer Faces) 中的各种 UI 组件及其使用方法,包括输入组件如 inputText 和 selectOneChoice,展示组件如 panelBox 和 navigationPaneEx,以及按钮组件等。并提供了实际应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<jf:spacer height="45px" /> 设置换行和与其他标签间隔高度
<jf:messages text="Error Message:" inlineStyle="width: 1080px;"/> 用来显示java后台返回的错误消息提示

<!-- Navigation Bar -->

<jf:breadCrumbs>

<jf:commandNavigationItem text="#{res['header.booking']}" disabled="true"  />

<jf:commandNavigationItem text="#{res['header.booking.search']}" disabled="true" inlineStyle="font-size:12pt;" /> 

</jf:breadCrumbs> 

标签容器.

<jx:panelBox text="title" rendered="true" inlineStyle="width: 1100px;"> 是一个容器一般用来放文本框 ,文本域,表格.属性:text ,用来显示标题.
rendered 用来控制是否显示 属性值为true 是显示 ,false 则隐藏. inlineStyle="width:97%;" 用来写 css 样式调整布局 ,长度单位可已是像素也可以是百分比

<jx:panelBox text="title" inlineStyle="width: 950px;" >

<cx:panelFormLayout maxColumns="2" labelWidth="190" fieldWidth="260">

<jf:inputText readOnly="true" value="#{caller.userName}" label="#{appRes['booking.list.createdBy']}"/> 在里面加上rows="数字"  变成文本域

select item/button 在项目以以下三种方式出现

<jf:selectOneChoice readOnly="true"  label="#{xxx}"  value="{xxx}"  >                   

<f:selectItems value="#{pageFlowScope.booking_description}" />

</jf:selectOneChoice>

 <jf:selectBooleanCheckbox label="#{codeMainRes['roomcode.activeType']}" value="#{roomCodePageBean.roomCode.active}" showRequired="true"/>  --复选框  

 <cx:selectOneChoice readOnly="true" value="#{xx}"  dataId="initiatedByBean"> </cx:selectOneChoice> 

单选框

<jf:selectOneRadio   id="leaveDateToApm"  valueChangeListener="#{leaveRequestHandler.leaveDateToApmChanged}"

  readOnly="#{leaveRequestPageBean.leaveRequest.revision!=0}"
  valuePassThru="true"  value="#{leaveRequestPageBean.leaveRequest.leaveDateToApm}"
    autoSubmit="true"  immediate="true" layout="horizontal">
  <f:selectItem itemLabel="AM" itemValue="am" />
  <f:selectItem itemLabel="PM" itemValue="pm" />
</jf:selectOneRadio>

 

 

用作显示时间的tag

<jf:inputDate readOnly="#{applicationPageBean.application.status!=null}" label="#{xx}" value="#{xx}"

  <jf:convertDateTime pattern="dd MMM yyyy"></jf:convertDateTime>

  </jf:inputDate>

</cx:panelFormLayout>

</jx:panelBox>

2.button 

1.导航button

<jx:navigationPaneEx id="buttons1" hint="buttons" rendered="true" inlineStyle="text-align: left; margin-left: 8px; width: 97%;">

<jf:commandNavigationItem id="save2" text="#{codeMainRes['btn.save']}" rendered="#{!picsDeclarationPageBean.readOnly}"

 action="#{picsDeclarationHandler.save}"  partialSubmit="true" onclick="return confirm('Confirm to Save?')">

<jf:setActionListener from="ADD"   to="#{picsDeclarationHandler.action}" />

</jf:commandNavigationItem>

</jx:navigationPaneEx>

2, 放在panelBox 容器里面的button

<jf:panelHorizontalLayout>

<jf:commandButton text="#{res['search.search']}" id="search" actionListener="#{statusEnquireHandler.search}" />

<jf:commandButton text="#{res['search.reset']}" id="reset" actionListener="#{statusEnquireHandler.reset}" /></jf:panelHorizontalLayout> 

<jf:commandNavigationItem id="Submit" text="#{res['btn.submit']}"  rendered="true"  action="#{newApplicationHandler.save}">  

<jf:setActionListener from="VIEW"   to="#{newApplicationHandler.action}" /> -- 从页面中把from的属性值传入到handler属性action

转载于:https://www.cnblogs.com/bella-life-blog/p/3608162.html

<think>我们正在讨论Java 24中替代`javax.servlet.jsp.PageContext`的方案。根据引用[2]和[3]可知,`PageContext`是JSP技术中的一个核心类,用于提供页面上下文信息。然而,随着Jakarta EE的发展,特别是Jakarta Server Pages(JSP)的后续技术被Facelets(JSF的默认视图技术)和JSP的替代技术(如JSPX)所取代,现在更推荐使用Jakarta Server Faces(JSF)或直接使用Servlet加模板引擎(如Thymeleaf、FreeMarker)等。 在Java 24(即Jakarta EE 10或更高版本)中,JSP已经被标记为弃用,并且在新版本中可能不再支持。因此,替代`PageContext`的方案主要取决于你选择的视图技术。 ### 1. 使用Jakarta Server Faces (JSF) 在JSF中,你可以通过FacesContext来获取类似的信息。 ```java import jakarta.faces.context.FacesContext; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; // 获取当前FacesContext FacesContext facesContext = FacesContext.getCurrentInstance(); // 获取HttpServletRequest HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest(); // 获取HttpServletResponse HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse(); ``` ### 2. 使用Servlet API 如果你直接使用Servlet,那么你可以在Servlet中通过HttpServletRequest和HttpServletResponse对象来获取信息,而不需要PageContext。 ```java @WebServlet("/example") public class ExampleServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) { // 设置请求属性 request.setAttribute("key", "value"); // 转发请求到JSP(虽然不推荐,但如果你仍在使用JSP) request.getRequestDispatcher("/WEB-INF/example.jsp").forward(request, response); } } ``` ### 3. 使用模板引擎(如Thymeleaf) 在模板引擎中,你通常不需要直接使用PageContext,因为模板引擎提供了自己的上下文对象。 例如,在Thymeleaf中,你可以使用WebContext: ```java WebContext context = new WebContext(request, response, servletContext, request.getLocale()); context.setVariable("key", "value"); templateEngine.process("template", context, response.getWriter()); ``` ### 4. 在JSP中使用替代方案(不推荐) 如果你仍然需要在JSP中使用类似PageContext的功能,在Jakarta EE 9+中,包名已经由`javax`改为`jakarta`。因此,你可以使用`jakarta.servlet.jsp.PageContext`。但是,请注意,JSP本身已被弃用。 ```jsp <%@ page import="jakarta.servlet.jsp.PageContext" %> <% // 在JSP中,pageContext对象是自动可用的,不需要导入 pageContext.setAttribute("key", "value", PageContext.REQUEST_SCOPE); %> ``` ### 迁移步骤 1. **更新依赖**:将`javax.servlet.jsp`依赖替换为`jakarta.servlet.jsp`(如果仍需要JSP)。 2. **修改导入**:将所有`javax.servlet.jsp`的导入改为`jakarta.servlet.jsp`。 3. **考虑替代技术**:建议迁移到JSF、Thymeleaf等现代视图技术。 ### Maven依赖更新(如果仍要使用JSP) ```xml <dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> ``` ### 常见问题解决 #### 问题:JSP页面报错`jakarta.servlet.jsp.PageContext cannot be resolved to a type` **原因**:项目缺少Jakarta Server Pages API的依赖。 **解决方案**:添加上述Maven依赖,或者确保你的应用服务器(如Tomcat 10+)提供了该API。 ### 相关问题 1. 如何在Jakarta EE 10中使用Thymeleaf替代JSP? 2. JSF中如何获取请求参数? 3. 如何将现有的JSP应用迁移到Jakarta EE 10? 4. Thymeleaf和JSF的主要区别是什么? 5. 在Jakarta EE中,JSP是否被完全弃用? 6. 如何在Spring Boot中使用Jakarta Server Pages? 7. 使用模板引擎(如Thymeleaf)时如何实现自定义标签? ### 总结 在Java 24(Jakarta EE 10+)中,推荐使用现代视图技术(如JSF或Thymeleaf)来替代JSP。如果必须使用JSP,则应将依赖升级到Jakarta命名空间,并使用`jakarta.servlet.jsp.PageContext`。同时,注意JSP已被标记为弃用,因此在新项目中应避免使用。</think>### Java 24 中替代 `javax.servlet.jsp.PageContext` 的方案 在 Java 24 (Jakarta EE 10+) 中,`javax.servlet.jsp.PageContext` 已被弃用,替代方案主要基于 **Jakarta Server Pages (JSP) 4.0** 和 **Jakarta Servlet 6.0** 的新 API 体系。以下是完整的迁移方案: #### 1. 核心替代方案 ```java // 旧代码 (JSP 2.3) <%@ page import="javax.servlet.jsp.PageContext" %> <% PageContext pageContext = (PageContext) request.getAttribute("javax.servlet.jsp.jspPageContext"); %> // 新代码 (JSP 4.0) <%@ page import="jakarta.servlet.jsp.PageContext" %> <% jakarta.servlet.jsp.PageContext pageContext = (jakarta.servlet.jsp.PageContext) request.getAttribute("jakarta.servlet.jsp.jspPageContext"); %> ``` #### 2. 作用域变量访问替代方案 | 旧方法 (JSP 2.3) | 新方法 (JSP 4.0) | |----------------------------------|--------------------------------------| | `pageContext.getAttribute("var")` | `jspContext.getAttribute("var")` | | `pageContext.setAttribute("var")` | `jspContext.setAttribute("var")` | | `pageContext.findAttribute("var")`| `jspContext.findAttribute("var")` | #### 3. 完整迁移示例 ```jsp <%-- 旧版 JSP --%> <%@ page import="javax.servlet.jsp.PageContext" %> <% PageContext ctx = (PageContext) pageContext; ctx.setAttribute("user", "admin", PageContext.SESSION_SCOPE); %> <%-- 新版 JSP --%> <%@ page import="jakarta.servlet.jsp.PageContext" %> <% jakarta.servlet.jsp.JspContext jspContext = pageContext; jspContext.setAttribute("user", "admin", PageContext.SESSION_SCOPE); %> ``` #### 4. 依赖更新 (Maven) ```xml <!-- 移除旧依赖 --> <!-- <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> </dependency> --> <!-- 添加新依赖 --> <dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> ``` #### 5. 隐式对象映射表 | 隐式对象 | 旧类型 (JSP 2.3) | 新类型 (JSP 4.0) | |--------------|-------------------------------|--------------------------------------| | `pageContext`| `javax.servlet.jsp.PageContext`| `jakarta.servlet.jsp.PageContext` | | `request` | `javax.servlet.http.HttpServletRequest` | `jakarta.servlet.http.HttpServletRequest` | | `response` | `javax.servlet.http.HttpServletResponse`| `jakarta.servlet.http.HttpServletResponse`| | `session` | `javax.servlet.http.HttpSession` | `jakarta.servlet.http.HttpSession` | ### 迁移注意事项 1. **包名变更规则** ```java // 所有 javax.servlet 替换为 jakarta.servlet javax.servlet -> jakarta.servlet javax.servlet.jsp -> jakarta.servlet.jsp ``` 2. **作用域常量变更** ```java // 旧常量 PageContext.PAGE_SCOPE PageContext.REQUEST_SCOPE // 新常量 (完全兼容) jakarta.servlet.jsp.PageContext.PAGE_SCOPE jakarta.servlet.jsp.PageContext.REQUEST_SCOPE ``` 3. **JSP 自定义标签处理** ```java // 旧标签支持 public class OldTag extends TagSupport { public int doStartTag() throws JspException { PageContext pc = (PageContext) getJspContext(); } } // 新标签支持 public class NewTag extends SimpleTagSupport { public void doTag() throws JspException, IOException { JspContext jspContext = getJspContext(); } } ``` ### 常见问题解决方案 #### 问题:`jakarta.servlet.jsp.PageContext cannot be resolved` [^3] **解决方案**: 1. 确认 Maven 依赖: ```xml <dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>3.1.0</version> </dependency> ``` 2. 清理 IDE 缓存并重新构建项目 3. 确保应用服务器支持 Jakarta EE 10+ (如 Tomcat 10.1+, WildFly 27+) #### 问题:JSP 隐式对象不可用 **解决方案**:使用 EL 3.0+ 表达式替代脚本 ```jsp <%-- 旧方式 --%> <%= pageContext.getAttribute("user") %> <%-- 新方式 --%> ${pageContext.getAttribute("user")} ``` ### 现代替代技术建议 对于新项目,建议考虑以下替代方案: 1. **Jakarta Server Faces (JSF)** - 组件化 Web 框架 2. **Thymeleaf** - 现代模板引擎 3. **JSP 标准标签库 (JSTL)** 配合 EL 表达式 ### 相关问题 1. 如何在 Jakarta EE 10 中配置 JSP 4.0? 2. JSP 4.0 相对于旧版本有哪些主要改进? 3. 如何将基于 JSP 2.3 的应用迁移到 Jakarta EE 10? 4. Jakarta Server Faces 和 JSP 的主要区别是什么? 5. 如何在 JSP 4.0 中实现自定义标签? 6. Tomcat 10 支持哪些 Jakarta EE 规范? 7. JSP 4.0 中的 EL 表达式有哪些增强特性? > **迁移提示**:使用 [Eclipse Transformer](https://github.com/eclipse/transformer) 工具可自动化完成 `javax` 到 `jakarta` 的包名转换。对于新项目,建议优先考虑组件化框架如 Jakarta Server Faces 或现代模板引擎如 Thymeleaf[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值