JSF2.0中的实例测试(一)

本文详细介绍了JSF 2.0中的新特性,包括资源管理、自定义验证标签、导航改进等内容。同时,还展示了如何通过注解实现Bean的管理和作用范围设置。

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

<img src="#{resource['images/wave.med.gif']}" alt="Hello!"/> 这是jsf2.0中的新特性,意思是把系统中的图片、css、JS文件都作为资源,放在EL表达式内表示,resource是Map类型,中括号里面是key,’images/wave.med.gif’表示的相对路径,如果最前面有“/”,表示是该系统的根目录,例如,http://localhost:8081/samples/guess/javax.faces.resource/images/wave.med.gif
http://localhost:8081 是我的本地服务器地址及端口,/samples 是系统的根目录,/guess 是由WEB.xml中

Faces Sevlert 映射的路径,配置如下:
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/guess/*</url-pattern>
</servlet-mapping>


/javax.faces.resource 是resource映射的路径,

/images/wave.med.gif 是该图片资源在系统中的位置。

我不推荐使用这个新特性,因为对于美工设计人员来说,虽然有了<img>标签,这是一点进步,但是其属性src的路径与

图片资源的实际路径无法对应起来的,因为Dreamweaver是无法识别EL语言的。
因此,我决定还是使用jsf1.2操作样式 ,如下:

<img src="../images/emsymlogo.png" alt="EMSYM" jsfc="h:graphicImage" value="/images/emsymlogo.png"/>

对于样式表来说也是如此

自定义验证标签:<gn:validator minimum="#{userNumberBean.minimum}" maximum="#{userNumberBean.maximum}"/>
其中,命名空间gn 是在uessnumber.tablib.xml配置文件中定义,如下:
<namespace>http://java.sun.com/jsf/demo/guessnumber</namespace>
<tag>
<tag-name>validator</tag-name>
<validator>
<validator-id>ClientSideValidator</validator-id>
<handler-class> guessnumber.ClientSideValidatorHandle </handler-class>
<validator-extension>
<foo>bar</foo>
</validator-extension>
</validator>
</tag>

并且在web.xml中注册,如下:
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/guessnumber.taglib.xml</param-value>
</context-param>

JSF2.0中的导航也跟以前不一样了,不需要在config.faces.xml文件中集中设置导航
<h:commandButton id="submit" action="response?faces-redirect=true" value="Guess!"/>

response是下一个jsf页面的名称。



BackingBean是利用注入的方式应用,不需要在config.faces.xml配置文件中注册了,如下:
@ManagedBean
@SessionScoped 作用范围

另外两个注解:

@SuppressWarnings :抑制编译器发出警告。

@PostConstruct: 当bean对象完成实例化后,使用了这个注释的方法会被立即调用。但不等于说部署后就会执行。

bean的实例化只有在bean被访问到时才会实例化,这取决于服务器的策略,如果bean之前就不存在肯定会实例化它,

并执行该注解方法,如果之前已经实例化了一些Bean,并且现在有可用的,那么不会实例化,也不会执行方法注解

方法。执行这个方法时,相关的资源依赖已经注入完毕。

一个枚举类的例子:
private enum Response {
Correct("Yay! You got it!"),
Larger("Sorry, {0} is incorrect. Try a larger number."),
Smaller("Sorry, {0} is incorrect. Try a smaller number.");

private String msg;
Response(String msg) {
this.msg = msg;
}

String getMessage(Object... params) {
return MessageFormat.format(msg, params);
}
}

引用方式:Response.Correct.getMessage(); 没有参数

Response.Larger.getMessage(userNumber);有参数

import javax.faces.context.FacesContext;
public class ServletContextInitialParameter {

public static String getInitialParameterValue(String parameterName) {
FacesContext fc = FacesContext.getCurrentInstance();
return fc.getExternalContext().getInitParameter(parameterName);
}
}

如下是在web.xml文件中配置全局的参数和值,在系统进行编译的时候初始化值。
<context-param>
<param-name>com.emsym.space.storePath</param-name>
<param-value>
D:\Program Files\apache-tomcat-6.0.18\webapps </param-value>
</context-param>

以下是在java代码中以用:

String directory = ServletContextInitialParameter.getInitialParameterValue("com.emsym.space.storePath");

以下是在jsf视图中引用:

#{initParam['com.emsym.space.storePath']}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值