【转】 Seam的JSF控件(二)
2010-07-05 14:21
<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> 的所有属性,以及: 属性
-
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
-
<s:transformImageBlur>
-
<s:transformImageType>
-
创建你自己的转换很容易——创建一个 实现 了 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)。 属性
用法 <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> |
为了允许你用Seam组件作为JSF转换器和验证器,Seam也提供注解:
@Converter
-
@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的转换器。
@Validator
-
@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组件的验证器;注入的组件用来验证值