jsf案例代码,jsf开发
更新:2022-11-17 09:38
本文目录一览:
- 我用JSF做了一个登录模块,就是登录成功转到成功页面,登录失败转到失败界面。但是测试时页面无反应?
- [有关JSF-JPA集成报 Could not find a setter for property message in class ..问题](#有关JSF-JPA集成报 Could not find a setter for property message in class ..问题)
- JSF如何使用ExternalContext
- [JSF 跳转至新页面问题](#JSF 跳转至新页面问题)
- jsf中selectOneMenu中出现了这个问题的错误代码
我用JSF做了一个登录模块,就是登录成功转到成功页面,登录失败转到失败界面。但是测试时页面无反应?
代码没发现有什么问题,web.xml文件中 servlet-mapping servlet-nameFaces Servlet/servlet-name url-pattern/faces//url-pattern /servlet-mapping 你访问index.jsp文件是怎么访问的? 我一般是设置成 servlet-mapping servlet-nameFaces Servlet/servlet-name url-pattern.jsf/url-pattern /servlet-mapping 访问index.jsp是地址栏写成index.jsf。 LoginBean.java最好加一个构造函数,哪怕它是空的构造函数。 你可以下个断点,跟一下代码,看是不是调用了verify这个方法。
有关JSF-JPA集成报 Could not find a setter for property message in class ..问题
报错的意思是,你在往某个类的对象放值的时候,该类里面缺少set方法,类名就是你“Could not find a setter for property message in class ..”省略号那部分,你没打出来的那个类,而我没有看错的话应该就是你最后这个类“UserAction”(虽然你改名字了)。 你看下你给的代码最后一个类,报错的这句话 EntityManagerFactory f=Persistence.createEntityManagerFactory("ss"); 这里定义了一个EntityManagerFactory对象,然后把值ss放到里面,而一般的类做“放入”操作的时候都要用到setXX()方法的,而你上面只有EntityManagerFactory getEMFactory()也就是get()方法,却没有set()方法,所以在你做set操作的时候却有没有set方法,自然会报出“Could not find a setter for property message in class ..”这样的错误提示
JSF如何使用ExternalContext
除此之外,ExternalContext实例提供了包装器方法,可以使用这些方法获得原来需要从ServletContext、ServletRequest及ServletResponse对象上调用一些方法获得的信息。获取ServletContext、ServletRequest和ServletResponse对象可使用下列方法获取servlet信息:
getContext
此方法可获取Web应用中与当前请求相关联的ServletContext对象。其签名如下:public abstract Object getContext()
getRequest
此方法可获取代表当前正在处理的请求的ServletRequest对象。其签名如下:public abstract Object getRequest()
getResponse
此方法可获取代表当前正在呈现的响应的ServletResponse对象。其签名如下:public abstract Object getResponse()
这些方法都是返回一个java.lang.Object
对象,不是servlet特有的类型,这样就可以使JSF实现独立于其运行的环境。比如,JSF既可用于Web容器,也可以用于其他容器,如portlet等。
获取ServletContext特性
getApplicationMap
方法返回一个包含 ServletContext对象里全部特性名/值对的Map 对象。下面是此方法的签名:public abstract java.util.Map getApplication()
作为一个例子,下面的代码可获取一个名叫databaseUtility的特性:
Object contextAttribute = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map contextMap = externalContext.getApplicationMap();
if (contextMap != null)
contextAttribute = contextMap.get("databaseUtility");
获取Session对象及其特性
通过ExternalContext对象可访问与当前请求相关联的Session对象。getSession
方法可取回当前用户的javax.servlet.http.HttpSession
对象,如果当前用户没有相应的Session对象,此方法的行为由传入的参数决定:如果为该方法传入了一个true值,它会创建一个Session对象;否则,它会返回null。下面是getSession方法的签名:public abstract Object getSession(boolean create)
此方法其实是javax.servlet.http.HttpServletRequest
接口中getSession
方法的包装器。
getSessionMap
方法返回一个包含与当前请求相关联的Session对象里所有特性名/值对的Map对象。下面是它的方法签名:public abstract java.util.Map getSessionMap()
要获取Session对象里的特性,可调用Map类的get方法,传入要获取的特性名即可。文档中没有指明在当前请求没有相应Session对象的情况下,此方法是返回null还是一个空的Map对象。所以在调用Map的get方法之前,需要先检查 Map是否为null。下面的代码是获取Session特性的例子:
Object sessionAttribute = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map sessionMap = externalContext.getSessionMap();
if (sessionMap != null)
sessionAttribute = sessionMap.get(key);
最后一行的key是一个包含特性名的字符串。
获取ServletContext对象的初始参数
getInitParameter
方法是 ServletContext对象的 getInitParameter
方法的包装器,用这个方法可以提取在部署描述符(web.xml文件)里用context-init
元素指定的初始参数值。此方法的签名如下:public abstract String getInitParameter(String parameterName)
举例来说,如果在部署描述符声明了如下context-init
元素:
<context-param>
<param-name>contactPerson</param-name>
<param-value>Scott Jobim</param-value>
</context-param>
下面代码中的字符串变量initParam的值会是 Scott Jobim
。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
String initParam = externalContext.getInitParameter("contactPerson");
getInitParameterMap
方法返回一个包含ServletContext对象中全部初始参数的Map对象。其签名如下:public abstract java.util.Map getInitParameterMap()
为了获取一个初始参数的值,使用Map对象的get方法,同时传递初始参数的名称。比如,下面的代码把初始参数databaseName的值输出到控制台。
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map paramMap = externalContext.getInitParameterMap();
if (paramMap != null) {
System.out.println(paramMap.get("databaseName"));
}
获取Request对象的特性
getRequestMap
方法返回一个包含当前Request 对象中全部特性名/值对的Map对象。其方法签名如下:public abstract java.util.Map getRequestMap()
作为一个例子,下面的代码可用来提取Request对象里的特性:
Object requestAttribute = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map requestMap = externalContext.getRequestMap();
if (requestMap != null)
requestAttribute = requestMap.get(key);
最后一行里的key是一个包含要提取的属性名的字符串。
访问Request对象里的参数名和值
getRequestParameterMap
、getRequestParameterNames
和 getRequestParameterValuesMap
方法可用来访问Request对象里的参数名和值。
getRequestParameterMap
返回一个包含Request对象里全部参数名/值对的Map对象。其签名如下:public abstract java.util.Map getRequestParameterMap()
getRequestParameterNames
方法返回一个包含全部请求参数名的Iterator
。此方法其实是ServletRequest.getParameterNames
方法的包装器。不同的是,ExternalContext类的getRequestParameterNames
返回一个Iterator
,而不是java.util.Enumeration
。此方法的签名如下:public abstract java.util.Iterator getRequestParameterNames()
getRequestParameterValuesMap
方法返回一个包含Request对象里全部参数名/值对的Map对象。此方法与getRequestParameterMap
方法很相似,但getRequestParameterValuesMap
可返回全部相同参数名的值。在此方法返回的Map对象上调用get(key)方法,这一点等同于获取当前请求的ServletRequest并在其上调用getParameterValues(key)
。也就是说,Map对象返回的是一个字符串数组。
获取请求头的名和值
getRequestHeaderMap
方法返回一个包含当前请求中全部头名/值对的Map对象。其方法签名如下:public abstract java.util.Map getRequestHeaderMap()
举个例子来说,下面的代码提取host头的值:
String host = null;
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
Map headerMap = externalContext.getRequestHeaderMap();
if (headerMap != null) {
host = (String) headerMap.get("host");
System.out.println(host);
}
注意:报头的名称是不区分大小写的。比如,对getRequestHeaderMap
返回的 Map对象分别用host、Host和Host作为参数来调用 get方法,其结果是一样的。
getRequestHeaderValuesMap
方法与getRequestHeaderMap
方法相似。
JSF 跳转至新页面问题
h:commandButton 改成 h:commandLink 记得把两篇贴子一块结了
h:commandButton做不到你说的那种效果,要是想在新窗口中打开,还要用h:commandButton,你就加onclick属性吧,然后window.open吧
jsf中selectOneMenu中出现了这个问题的错误代码
好好检查你的实体类,应该是类型转换错误,检查action所绑定的页面对应属性