私はJava EE(私はかなり新しくなっています)のWebアプリケーション(JSF、JPA、EJB)に取り組んでいて、人間が読めるようにPrettyFacesを組み込んでいます/ブックマーク可能なURL。私は2つの理由でフィルターを使用しています。PrettyFaces、Filter、およびURLパターンの問題
- ユーザーがログインしていることを確認する。
- JPA遅延ロードが生成するビューが(例えば、私は設定することができたときに動作しますので、取引にfilterChain.doFilter(...)への呼び出しをラップしますバッキングBeanのDepartmentオブジェクトを使用し、#{backingBean.department.employees}を使用して.xhmtlファイル内の従業員の関連リストを取得します)。
PrettyFacesを組み込む前に、* .xhmtlというurlパターン(フィルタはログインページ用に実際には実行する必要はありません)を使用していました。 PrettyFacesでは、フィルタのURLパターンを指定しようとすると、URLパターンルールの柔軟性が欠如していることが原因です(正規表現のサポートが不足しているため)。フィルタを使用して(そしてコードを複製することなく)必要なものを達成する別の方法がありますか?
また、私は、/ dept /#{deptName}/...のようにURLの先頭に静的な部分を追加してから、/ dept/*のurl-patternでフィルタを使用して、 /#{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) { }
}
}
I持って、このようなものです管理対象Bean ...ビューuutSerialNumber.xhmtlで
@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
}
、私はのトラブルに行きたいしない限り、私は、遅延ロードを必要とし、このような何かを(行います私uutServiceBean.findUutByUutIdで手動プリフェッチコレクション())...
<ul>
<c:forEach var="serialNumber item="#{uut.serialNumbers}>
<li>#{serialNumber.description}</li>
</c:forEach>
</ul>
共有ありがとう! –