Seam包括许多有利于使用Seam的JSF控件。它们用来补充内建的JSF控件,以及来自其他第三方库的控件。 我们推荐以JBoss Ajax4jsf、JBoss Richfaces和Apache MyFaces Trinidad标签库来使用Seam。我们不建议使用Tomahawk标签库来使用Seam。
为了使用这些tagsd,要在你的页面中定义“s”命名空间如下(只用于Facelets):
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib">ui的例子,示范了这其中许多标签的用法。
Table 29.1. Seam的JSF控件参考
<s:button> | 描述 通过控制对话传播支持动作调用的按钮。不提交表单。 属性
用法 <s:button id="cancel" value="Cancel"
action="#{hotelBooking.cancel}"/> |
<s:cache> | 描述 利用JBoss的Cache缓存渲染过的页面片断。 注意 <s:cache> 实际上使用由内建的 pojoCache 组件管理的JBoss Cache的实例。 属性
Usage 用法 <s:cache key="entry-#{blogEntry.id}" region="pageFragments">
<div class="blogEntry">
<h3>#{blogEntry.title}</h3>
<div>
<s:formattedText value="#{blogEntry.body}"/>
</div>
<p>
[Posted on 
<h:outputText value="#{blogEntry.date}">
<f:convertDateTime timezone="#{blog.timeZone}" locale="#{blog.locale}"
type="both"/>
</h:outputText>]
</p>
</div>
</s:cache> |
<s:conversationId> | 描述 将对话id添加到一个输出链接(或者类似的JSF控件)。只用于Facelets。 属性 无。 |
<s:conversationPropagation> | 描述 给一个命令链接或者按钮定制对话传播(或者类似的JSF控件)。只用于Facelets。 属性
用法 <h:commandButton value="Apply" action="#{personHome.update}">
<s:conversationPropagation type="join" />
</h:commandButton> |
<s:convertDateTime> | 描述 在Seam的timezone中执行日期或者时间对话。 属性 无。 用法 <h:outputText value="#{item.orderDate}">
<s:convertDateTime type="both" dateStyle="full"/>
</h:outputText> |
<s:convertEntity> | 描述 给当前的组件分配一个实体转换器。这主要对单选按钮和下拉控件有用。 转换器使用任何具有 @Id 注解(简单的或者复合的)的受控实体。 属性 无。 配置 你必须通过 <s:convertEntity /> 使用 Seam管理的事务 (请见Section 8.2, “Seam管理的事务”) 如果你的 受控持久化上下文 不是称作 entityManager,那你就需要在 components.xml 中设置它: <component name="org.jboss.seam.ui.EntityConverter">
<property name="entityManager">#{em}</property>
</component>如果你想在实体转换器上使用不止一个实体管理器,你可以在componets.xml中为每一个实体管理器创建一份实体转换器。 <component name="myEntityConverter" class="org.jboss.seam.ui.converter.EntityConverter">
<property name="entityManager">#{em}</property>
</component><h:selectOneMenu value="#{person.continent}">
<s:selectItems value="#{continents.resultList}" var="continent"
label="#{continent.name}" />
<f:converter converterId="myEntityConverter" />
</h:selectOneMenu>用法 <h:selectOneMenu value="#{person.continent}" required="true">
<s:selectItems value="#{continents.resultList}" var="continent"
label="#{continent.name}"
noSelectionLabel="Please Select..."/>
<s:convertEntity />
</h:selectOneMenu> |
<s:convertEnum> | 描述 给当前的组件分配一个enum转换器。这主要对单选按钮和下拉控件有用。 属性 无。 用法 <h:selectOneMenu value="#{person.honorific}">
<s:selectItems value="#{honorifics}" var="honorific"
label="#{honorific.label}"
noSelectionLabel="Please select" />
<s:convertEnum />
</h:selectOneMenu> |
<s:decorate> | 描述 在验证失败或者设置了 required="true" 时,“装饰”一个JSF输入域。 属性
#{invalid} 和 #{required} 可以在 s:decorate 内使用; 如果你按要求设置了正被装饰的输入组件,#{required} 就取值为 true, 并且如果发生校验错误, #{invalid} 取值为 true。 用法 <s:decorate template="edit.xhtml">
<ui:define name="label">Country:</ui:define>
<h:inputText value="#{location.country}" required="true"/>
</s:decorate><ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:s="http://jboss.com/products/seam/taglib">
<div>
<s:label styleClass="#{invalid?'error':''}">
<ui:insert name="label"/>
<s:span styleClass="required" rendered="#{required}">*</s:span>
</s:label>
<span class="#{invalid?'error':''}">
<s:validateAll>
<ui:insert/>
</s:validateAll>
</span>
<s:message styleClass="error"/>
</div>
</ui:composition> |
<s:div> | 描述 渲染一个HTML<div>。 属性 无。 用法 <s:div rendered="#{selectedMember == null}">
Sorry, but this member does not exist.
</s:div> |
<s:enumItem> | 描述 从一个enum值中创建一个 SelectItem。 属性
用法 <h:selectOneRadio id="radioList"
layout="lineDirection"
value="#{newPayment.paymentFrequency}">
<s:convertEnum />
<s:enumItem enumValue="ONCE" label="Only Once" />
<s:enumItem enumValue="EVERY_MINUTE" label="Every Minute" />
<s:enumItem enumValue="HOURLY" label="Every Hour" />
<s:enumItem enumValue="DAILY" label="Every Day" />
<s:enumItem enumValue="WEEKLY" label="Every Week" />
</h:selectOneRadio> |
<s:fileUpload> | 描述 渲染一个文件上载控件。这个控件必须通过在form中使用 multipart/form-data 的编码类型,例如: <h:form enctype="multipart/form-data"> 对于多部分请求,也必须在 web.xml 中配置Seam Multipart Servlet过滤器: <filter> <filter-name>Seam Filter</filter-name> <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 配置 下列多部分请求的配置选项可以在 components.xml 中进行配置:
下面是一个例子: <component class="org.jboss.seam.web.MultipartFilter"> <property name="createTempFiles">true</property> <property name="maxRequestSize">1000000</property> </component> 属性
用法 <s:fileUpload id="picture" data="#{register.picture}"
accept="image/png"
contentType="#{register.pictureContentType}" /> |
<s:formattedText> | 描述 输出 Seam Text,一种富文本标记,对于博客、Wiki和其他可能使用富文本的应用程序很有用。完整的用法请见Seam Text章节。 属性
用法 <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> 的所有属性,以及: 属性
转换 为了给图片应用一种转换,你要嵌套一个指定要应用的转换的标签。Seam目前支持下面这些转换:
创建你自己的转换很容易——创建一个 实现 了 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> | 描述 通过控制对话传播支持动作调用的链接。不提交表单。 属性
用法 <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 属性
用法 <s:label styleClass="label">
Country:
</s:label>
<h:inputText value="#{location.country}" required="true"/> |
<s:remote> | 描述 用Seam Remoting生成所需要的JavaScript存根(stub)。 属性
用法 <s:remote include="customerAction,accountAction,com.acme.MyBean"/> |
<s:selectDate> | 描述 已被废弃。 用 <rich:calendar /> 代替。 显示一个动态的日期选择器组件,它给指定的输入域选择日期。 selectDate 元素的主体应该包含HTML元素,例如文本或者图片,提示用户点击以显示日期选择器。 日期选择器 必须 利用CSS定义样式。 可以在Seam booking demo中找到CSS范例文件 date.css ,或者可以利用seam-gen生成。 用来控制日期选择器外观的CSS样式也在下面做了说明。 属性
用法
<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类名。
![]() |
<s:selectItems> | 描述 从一个List、Set、DataModel或者Array中创建一个 List<SelectItem> 。 属性
用法 <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> |
为了允许你用Seam组件作为JSF转换器和验证器,Seam也提供注解:
@Name("fooConverter")
@BypassInterceptors
@Converter
public 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的转换器。
@Name("barValidator")
@BypassInterceptors
@Validator
public 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组件的验证器;注入的组件用来验证值。