我正在研究一個Java EE(我相當新的)Web應用程序(JSF,JPA,EJB),並且正在將PrettyFaces合併爲人類可讀/可收藏的網址。我一直在使用過濾器有兩個原因。PrettyFaces,Filter和url-pattern問題
- ,以確保用戶已登錄。
- 包調用filterChain.doFilter(...)在交易所以JPA延遲加載生成視圖時的工作(例如,我可以只設置後臺bean中的Department對象,並使用#{backingBean.department.employees}獲取.xhmtl文件中的關聯員工列表)。
在合併PrettyFaces之前,我在過濾器中使用* .xhmtl的url-pattern(雖然過濾器並不需要爲登錄頁面運行)。使用PrettyFaces,試圖爲過濾器指定url模式似乎有點問題,主要是由於url模式規則缺乏靈活性(缺少對正則表達式的支持)。有沒有另外一種方法可以完成我不需要使用過濾器(而不必複製代碼)的需要?我知道我可以在URL的開頭添加一個靜態部分(比如/ dept /#{deptName}/...,然後使用一個帶有/ dept/*的url模式的過濾器,但我希望只是從/#{deptName}/...開始(並且使用/ *的url模式在所有內容上運行過濾器,包括圖像,javascript,css等)
基本上,過濾器注入一交易...
@Resource UserTransaction tx;
而且做這樣的事情。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpReq = (HttpServletRequest) request;
HttpServletResponse httpRes = (HttpServletResponse) response;
HttpSession session = httpReq.getSession();
User currentUser = (User)session.getAttribute("userInSession");
if (currentUser == null) {
httpRes.sendRedirect("...") //redirect to LoginServlet
} else {
try {
tx.begin();
chain.doFilter(httpReq, httpRes);
}
catch (Exception e) { }
finally {
try {
tx.commit();
}
catch (Exception e) { }
}
}
我有一個託管Bean,它是這樣的...
@ManagedBean
@RequestScoped
@URLMapping(
id="uutSerialNumber",
pattern="/#{uutSerialNumberController.programId}/uut/#{uutSerialNumberController.uutId}",
viewId="/uutSerialNumber.xhtml"
)
public class UutSerialNumberController {
@EJB private ProgramServiceBean programServiceBean;
@EJB private UutServiceBean uutServiceBean;
private Integer programId;
private Integer uutId;
private Program program;
private Uut uut;
@URLAction
public String loadData() {
program = programServiceBean.findByProgramId(programId);
uut = uutServiceBean.findUutByUutId(uutId);
return null;
}
//other stuff, setters/getters
}
在視圖uutSerialNumber.xhmtl,我做這樣的事情(這需要延遲加載,除非我想去的麻煩在我uutServiceBean.findUutByUutId手動預取集合())...
<ul>
<c:forEach var="serialNumber item="#{uut.serialNumbers}>
<li>#{serialNumber.description}</li>
</c:forEach>
</ul>
感謝分享! – 2016-11-29 14:31:37