本文目錄一覽:
- 1、我用JSF做了一個登錄模塊,就是登錄成功轉到成功頁面,登錄失敗轉到失敗界面。但是測試時頁面無反應?
- 2、有關JSF-JPA集成報 Could not find a setter for property message in class ..問題
- 3、JSF如何使用ExternalContext
- 4、JSF 跳轉至新頁面問題
- 5、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.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- paramparam-namecontactPerson/param-nameparam-valueScott 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()作為一個例子,下面的代碼可用來提取名為id的請求參數的值:String id = null; FacesContext facesContext = FacesContext.getCurrentInstance(); ExternalContext externalContext = facesContext.getExternalContext(); Map requestParameterMap = externalContext.getRequestParameterMap(); if (requestParameterMap!=null) id = (String) requestParameterMap.get(“id”); getRequestParameterNames方法返回一個包含全部請求參數名的 Iterator。此方法其實是 ServletRequest.getParameterNames方法的包裝器。不同的是,ExternalContext類的 getRequestParameterNames返回一個Iterator,而不是java.util.Enumeration。此方法的簽名如下:public abstract java.util.Iterator getRequestParameterNames()作為一個例子,下面的代碼把所有的請求參數名/值對輸出到控制台。 FacesContext facesContext = FacesContext.getCurrentInstance(); ExternalContext externalContext = facesContext.getExternalContext(); Map requestParameterMap = externalContext.getRequestParameterMap(); Iterator parameterNames = externalContext.getRequestParameterNames(); while (parameterNames.hasNext()) { String parameterName = (String) parameterNames.next(); String parameterValue =(String) requestParameterMap.get(parameterName); System.out.println(parameterName + ” : ” + parameterValue); } getRequestParameterValuesMap方法返回一個包含Request對象里全部參數名/值對的Map對象。此方法與 getRequestParameterMap方法很相似,但getRequestParameterValuesMap可返回全部相同參數名的值。在此方法返回的Map對象上調用get(key)方法,這一點等同於獲取當前請求的ServletRequest並在其上調用 getParameterValues(key)。也就是說,Map對象返回的是一個字元串數組。 GetRequestParameterValuesMap方法的簽名如下:public abstract java.util.Map getRequestParameterValuesMap()下面例子中的代碼把請求參數id的全部值輸出到控制台。String[] id = null; FacesContext facesContext = FacesContext.getCurrentInstance(); ExternalContext externalContext = facesContext.getExternalContext(); Map requestParameterValuesMap = externalContext.getRequestParameterValuesMap(); if (requestParameterValuesMap!=null) { id = (String[]) requestParameterValuesMap.get(“id”);// print all values of id for (int i=0; iid.length; i++) { System.out.println(id[i]); } } 獲取請求頭的名和值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方法相似。但在 getRequestHeader
JSF 跳轉至新頁面問題
h:commandButton
改成
h:commandLink
記得把兩篇貼子一塊結了
________________________________________________
h:commandButton做不到你說的那種效果,要是想在新窗口中打開,還要用h:commandButton,你就加onclick屬性吧,然後window.open吧
jsf中selectOneMenu中出現了這個問題的錯誤代碼
好好檢查你的實體類,應該是類型轉換錯誤,檢查action所綁定的頁面對應屬性
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/190259.html