注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

赚客吧

 
 
 

日志

 
 
关于我

从明天起,做一个幸福的人, 洗澡,撸管,好好工作, 从明天起,关心姑娘和票子, 我有一种追求,骚气蓬勃,春心荡漾。

网易考拉推荐

<f:verbatim>  

2011-06-29 14:22:45|  分类: JSF标签 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

官方文档中廖廖几笔:Outputs its body as verbatim text. No JSP tags within the verbatim tag (including JSF tags) are evaluated; the content is treated simply as literal text to be copied to the response. Unless otherwise specified, all attributes accept static values or EL expressions.

简单说来就是,标签里包含什么,就在网页上输出什么!!!最近在项目中看到<f:verbatim>被滥用(新手常范),特此把实践中的经验跟大家分享一下 :)

JSF中<f:verbatim>标签的意义

一般来说,JSF建议使用JSF的标签。当然,JSF是一个标准的Web框架,所以也可以使用其他的非JSF标签。那么,想要放入非JSF元件,例如简单的模板(template)文字,那么就需要使用<f:verbatim /> 标签来处理。
<f:verbatim>是一个 JSF UIOutput组件并且绘制时转义XML元素,所以能在HTML页内正确显示。这个例子没有太多的内容,但它示范了在同一页面内不同的标记能一起使用。

例子:
<t:panelGrid id="pan" styleClass="gray" width="60%" columns="2" align="center">
<t:panelGroup>
<f:verbatim>序号:</f:verbatim>
</t:panelGroup>
<t:panelGroup>
<f:verbatim>
<t:inputText id="no" value="#{BookMark.no}" required="true" />
</f:verbatim>
</t:panelGroup>
<t:panelGroup>
<t:commandButton styleClass="button" id="addBtn" value="保 存" type="submit" action="#{BookMark.addBookMark}"/>
</t:panelGrid>
</t:panelGrid>

上面这段代码的输入域内置在<f:verbatim/>标签内了,那么提交后,在后台是得不到该域的值的。只有把<f:verbatim>标签去掉,方能正确取值。

需要在JSF标签(如:dataTable,dataScrollor等)中,包含非JSF内容(如:HTML标签,普通文本)时,必须用<f:verbatim>包含这些非JSF内容。有人会问:<f:verbatim>标签必须包含在<f:view>内,按照上面所说,<f:view>标签中的内容都要放到<f:verbatim>中了,实践表明不是这样的。看下面的例子(只为说明问题):

Copy code
<%@ page language="java" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta. http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%@ include file="/inc/header.jspf" %>
</head>

<body>
<f:view>
<%@ include file="/inc/menu.jspf" %>
<table class="head">
<tr>
<td>欢迎体验“投票管理系统”</td>
</tr>
</table>
<table class="content">
<h:form>
<tr>
<td valign="top">
<table>
<tr>
<td>请选择:</td>
</tr>
</table>
<t:dataTable newspaperColumns="2"id="data" value="#{voteQuestionHandler.demandAuditedDataModel}" var="voteQuestion"
preserveDataModel="false"
rows="#{pagerHandler.pagerVO.rows}"
columnClasses="tdColumn"
rowClasses="tdRow" styleClass="data"
forceIdIndexFormula="#{voteQuestion.id}">
<t:column>
<f:verbatim><li /></f:verbatim>
<t:commandLink value="#{voteQuestion.question}" action="goToVote" target="_blank">
<t:updateActionListener value="#{voteQuestion}" property="#{voteItemHandler.voteQuestionVO}" />
</t:commandLink>
</t:column>
</t:dataTable>
<%@ include file="/inc/pager.jspf" %>

</td>
</tr>
</h:form>
</table>
</f:view>
<%@ include file="/inc/footer.jspf" %>
</body>
</html>

另外,在包含文件(<%@ include...)中,有时是需要<f:verbatim>和<f:subview>标签的,如果你的包含文件不能很好的工作的话,可以试一下!!!由于Myfaces1.1.1之后版本的升级,要求表单标签(如:<h:inputText>)必须要包含在<h:form>标签内,可能<f:view><h:form>这样的写法是最省事的了!!!

<!--[if !supportEmptyParas]--> <!--[endif]-->

Faces Verbatim 组件

此高级组件是一个定制<f:verbatim/>标记,用于将 HTML 元素添加到某些组件中,并使 HTML 元素具有这些组件的行为。将 HTML 标记包装在<f:verbatim/>标记中,使其具有 JavaServer Faces 组件的行为,这样便解决了同时包含 JavaServer Faces 组件和 HTML 元素的页中出现的一些问题。

  • 标记组件更易于用来将 HTML 标记添加到 JSP 页面。

如果将HTML 元素或纯文本放在 JavaServer Faces 组件(如网格面板)内,并且不使用 Faces Verbatim 组件,则会出现以下情况:

  • HTML 组件在设计时根本不会出现,原因是表和网格面板被设置为呈现其自己的子对象。但是,HTML 元素实际上并不是 JavaServer Faces 组件的子对象,因此,可视设计器和组件会忽略被嵌入的元素。
  • 在运行时,嵌入HTML 元素的标签顺序与任何嵌入 JavaServer Faces 组件的标签顺序不同。因此,如果用户试图在嵌入 JavaServer Faces 组件的组件之间进行标签切换,将无法保证有序地排列标签顺序。
  • 如果使用Faces Verbatim 组件,请确保遵循以下准则:
    • IDE 使用的 JSP 页中的代码必须是对称的、格式正确的 XML,包括<f:verbatim>标记内的标记。例如,在<f:verbatim>标记中不能以<table>开头,但可以将结束</table>标记放在结束</f:verbatim>标记后面。
    • <f:verbatim>组件中不能嵌入其他 JavaServer Faces 组件。

<!--[if !supportEmptyParas]--> <!--[endif]-->

可以使用f:subview包含指定的JSF页面,或者其他JSF组件

使用f:subview包含JSF页面时,被包含的页面里只能包含有JSF组件,所有非JSF组件元素必须用f:verbatim标签进行转换。

f:subview的使用例:

main.jsp:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<f:view>
<hr>
使用方法1:
<f:subview id="id1">
<h:outputText value="3"></h:outputText>
<f:verbatim><br>World</f:verbatim>
</f:subview>
<hr>
使用方法2:
<f:subview id="id2">
<c:importurl="subpage.jsp" />
</f:subview>
<hr>
使用方法3:
<f:subview id="id3">
<%@ include file="subpage.jsp" %>
</f:subview>
<hr>
使用方法4:
<f:subview id="id4">
<jsp:include page="subpage.jsp" />
</f:subview>
</f:view>
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

subpage.jsp - 子页面文件

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<f:verbatim>subpage.</f:verbatim>
<h:outputText value="output component"></h:outputText>

<!--[if !supportEmptyParas]--> <!--[endif]-->

  评论这张
 
阅读(1877)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017