<s:formattedText> 描述 输出 Seam Text,一种富文本标记,对于博客、Wiki和其他可能使用富文本的应用程序很有用。完整的用法请见Seam Text章节。 属性 value — 一个指定要渲染的富文本标记的EL表达式。 用法 <s:formattedText value="#{blog.text}"/> 实例 <s:validateFormattedText> 描述 检查提交的值是否合乎Seam Text 属性 无。 <s:fragment> 描述 一个非渲染的组件,用于启用/取消它子组件的渲染。 属性 无。 用法 <s:fragment rendered="#{auction.highBidder ne null}"> Current bid:</s:fragment> <s:graphicImage> 描述 一个允许在Seam Component中创建图片的扩展了的 <h:graphicImage>;可以对图片进行进一步转换。 支持 <h:graphicImage> 的所有属性,以及: 属性 value — 要显示的图片。可以是一个路径 String(从classpath加载)、 byte[]、java.io.File、java.io.InputStream 或者 java.net.URL。 目前支持的图片格式有 image/png、image/jpeg 和 image/gif。 fileName — 如果没有指定,图片将有一个通用的文件名。 如果你想要自己给文件命名,就应该在这里指定。这个名称应该是唯一的。 转换 为了给图片应用一种转换,你要嵌套一个指定要应用的转换的标签。Seam目前支持下面这些转换: <s:transformImageSize> s:transformImageSize width — 图片的新宽度 height — 图片的新高度 maintainRatio — 如果为 true,并且指定了其中 一个 width/height,图片将利用不确定的、正被计算用来维持纵横比的尺寸调整大小。 factor — 通过指定的比例缩放图片 <s:transformImageBlur> radius — 利用指定的半径执行一个渐变模糊 <s:transformImageType> contentType — 将图片的类型变成 image/jpeg 或者 image/png 创建你自己的转换很容易——创建一个 实现 了 org.jboss.seam.ui.graphicImage.ImageTransform 的 UIComponent。 在 applyTransform() 方法内部使用 image.getBufferedImage() 来获得原始图片,用 image.setBufferedImage() 来设置你转换后的图片。转换以视图中指定的顺序进行。 用法 <s:graphicImage rendered="#{auction.image ne null}" value="#{auction.image.data}"> <s:transformImageSize width="200" maintainRatio="true"/></s:graphicImage> <s:link> 描述 通过控制对话传播支持动作调用的链接。不提交表单。 属性 value — 标签。 action — 指定动作监听者的一种方法绑定。 view — 链接的JSF view id。 fragment — 链接的fragment标识符。 disabled — 该链接处于取消状态吗? propagation — 确定对话传播风格:begin、join、nest、none 或者 end。 pageflow — 起始的页面流定义。 (这只在 propagation="begin" 或者 propagation="join"的时候才有用。) 用法 <s:link id="register" view="/register.xhtml" value="Register New User"/> <s:message> 描述 ”装饰“一个包含验证出错消息的JSF输入域。 属性 无。 用法 <f:facet name="afterInvalidField"> <s:span>  Error:  <s:message/> </s:span></f:facet> <s:label> 描述 装饰一个包含标签的JSF输入域。这个标签放在HTML <label> 标签内部,且与最近的JSF输入组件相关联。 它经常与 <s:decorate> 共用。 Attributes 属性 style — 控件的样式 styleClass — 控件的样式类 用法 <s:label styleClass="label"> Country:</s:label><h:inputText value="#{location.country}" required="true"/> <s:remote> 描述 用Seam Remoting生成所需要的JavaScript存根(stub)。 属性 include — 一个要为其生成Seam Remoting JavaScript 存根的以逗号分隔的组件名列表(或者合法的全类名)。 更多详情请见 Chapter 21, Remoting。 用法 <s:remote include="customerAction,accountAction,com.acme.MyBean"/> <s:selectDate> 描述 已被废弃。 用 <rich:calendar /> 代替。 显示一个动态的日期选择器组件,它给指定的输入域选择日期。 selectDate 元素的主体应该包含HTML元素,例如文本或者图片,提示用户点击以显示日期选择器。 日期选择器 必须 利用CSS定义样式。 可以在Seam booking demo中找到CSS范例文件 date.css ,或者可以利用seam-gen生成。 用来控制日期选择器外观的CSS样式也在下面做了说明。 属性 for — 日期选择器要把选择的日期插入到其中的输入域的id。 dateFormat — 日期格式的字符串。这应该与输入域的日期格式匹配。 startYear — 弹出年选择器范围将从这一年开始。 endYear — 弹出年选择器范围将从这一年终止。 firstDayOfWeek — 控制哪一天是一周的第一天(0 = Sunday, 6 = Saturday)。 如果没有设置这个属性,那么一周的第一天默认将基于用户所在的区域。 用法 <div class="row"> <h:outputLabel for="dob">Date of birth<em>*</em></h:outputLabel> <h:inputText id="dob" value="#{user.dob}" required="true"> <s:convertDateTime pattern="MM/dd/yyyy"/> </h:inputText> <s:selectDate for="dob" startYear="1910" endYear="2007"> <img src="img/datepicker.png"/> </s:selectDate> <div class="validationError"><h:message for="dob"/></div></div> 范例 CSS样式 以下列表描述了用来控制selectDate控件样式的CSS类名。 seam-date — 这个类用于包含弹出日历的外层 div。 (1) 它还用于控制日历内部布局的 table。 (2) seam-date-header — 这个类用于日历头表行(tr)和头表单元(td)。 (3) seam-date-header-prevMonth — 用于”前一个月“表单元(td),点击它时,导致日历显示当前显示的前一个月。 (4) seam-date-header-nextMonth — 这个类用于”下一个月“表单元(td),点击它时,导致日历显示当前显示的下一个月。 (5) seam-date-headerDays — 这个类用于历日header行(tr),它包含了周日期的名称。 (6) seam-date-footer — 这个类用于日历的footer行(tr),它显示当前日期。 (7) seam-date-inMonth — 这个类用于包含了当前显示月份中的一个日期的表单元(td)元素。 (8) seam-date-outMonth — 这个类用于包含了当前显示月份之外的一个日期的表单元(td)元素。 (9) seam-date-selected — 这个类用于包含当前选择日期的表单元td元素。 (10) seam-date-dayOff-inMonth — 这个类用于包含当前选择月份之内的”休假“日(例如周末,周六和周日)的表单元元素。 (11) seam-date-dayOff-outMonth — 这个类用于包含当前选择的月份之外的休假日(例如周末,周六和周日)的表单元元素。 (12) seam-date-hover — 这个类用于鼠标经过的表单元(td)元素。 (13) seam-date-monthNames — 这个类用于包含弹出月份选择器的 div 控件。 (14) seam-date-monthNameLink — 这个类用于包含弹出月份名称的anchor(a控件。 (15) seam-date-years — 这个类用于包含弹出年选择器的div控件。 (16) seam-date-yearLink — 这个类用于包含弹出年份的anchor(a)控件。 (17) <s:selectItems> 描述 从一个List、Set、DataModel或者Array中创建一个 List<SelectItem> 。 属性 value — 一个EL表达式,指定支持 List<SelectItem> 的数据; var — 定义迭代期间保存当前对象的本地变量的名称。 label — 渲染 SelectItem 时要使用的标签。可以参考 var 变量。 disabled — 如果为true,SelectItem 将被取消渲染。可以参考 var 变量。 noSelectionLabel — 指定(可选)标签放在列表的顶部(如果也指定 required="true",那么选择这个值将导致验证出错)。 hideNoSelectionLabel — 如果为true,选择一个值时,noSelectionLabel 将被隐藏。 用法 <h:selectOneMenu value="#{person.age}" converter="#{converters.ageConverter}"> <s:selectItems value="#{ages}" var="age" label="#{age}" /></h:selectOneMenu> <s:span> 描述 渲染一个HTML的<span>。 属性 无。 用法 <s:span styleClass="required" rendered="#{required}">*</s:span> <s:taskId> 描述 当任何可以通过 #{task} 使用的时候,将任何id添加到一个输出链接(或者类似的JSF控件)。只用于Facelets。 属性 无。 <s:validate> 描述 一个非可视化的控件,利用 Hibernate Validator 对绑定属性验证一个JSF输入域。 属性 无。 用法 <h:inputText id="userName" required="true" value="#{customer.userName}"> <s:validate /></h:inputText><h:message for="userName" styleClass="error" /> <s:validateAll> s:validateAll 描述 一个非可视化的控件,利用 Hibernate Validator 对它们绑定的属性验证所有的子JSF输入域。 属性 无。 用法 <s:validateAll> <div class="entry"> <h:outputLabel for="username">Username:</h:outputLabel> <h:inputText id="username" value="#{user.username}" required="true"/> <h:message for="username" styleClass="error" /> </div> <div class="entry"> <h:outputLabel for="password">Password:</h:outputLabel> <h:inputSecret id="password" value="#{user.password}" required="true"/> <h:message for="password" styleClass="error" /> </div> <div class="entry"> <h:outputLabel for="verify">Verify Password:</h:outputLabel> <h:inputSecret id="verify" value="#{register.verify}" required="true"/> <h:message for="verify" styleClass="error" /> </div></s:validateAll> 29.2. 注解 为了允许你用Seam组件作为JSF转换器和验证器,Seam也提供注解: @Converter @Name("fooConverter")@BypassInterceptors@Converterpublic class FooConverter implements Converter { @In EntityManager entityManager; @Transactional public Object getAsObject(FacesContext context, UIComponent cmp, String value) { EntityManager entityManager = (EntityManager) Component.getInstance("entityManager"); entityManager.joinTransaction(); // Do the conversion } public String getAsString(FacesContext context, UIComponent cmp, Object value) { // Do the conversion }} 将Seam组件注册为一个JSF转换器。这里展示的是,在将值转换回它的对象表示法的时候,能够访问JTA事务中的JPA EntityManager的转换器。 @Validator @Name("barValidator")@BypassInterceptors@Validatorpublic class BarValidator implements Validator { @In FooController fooController; public void validate(FacesContext context, UIComponent cmp, Object value) throws ValidatorException { FooController fooController = (FooController) Component.getInstance("fooController"); return fooController.validate(value); }} 将Seam组件注册为一个JSF验证器。这里展示的是,一个注入另一个Seam组件的验证器;注入的组件用来验证值。