JSF 및 PrimeFaces를 사용하여 로그인 양식을 구현했습니다. PrimeFaces 쇼케이스 웹 사이트에서 this example을 사용했습니다.Facelets 페이지의 세션 속성에 액세스하는 방법
저는 Facelets 페이지를 사용하여 dataTable을 표시합니다. 이제 위의 로그인 양식을이 테이블 페이지와 통합해야합니다. 그래서 세션 속성을 처리하기 위해 LoginBean.java에 몇 줄을 추가했습니다.
if (username.equals(getUsername_db()) && password.equals(getPassword_db())) {//valid user and paward
loggedIn = true;
msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", getUsername_db());
//new lines
FacesContext context2 = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context2.getExternalContext().getSession(true);
session.setAttribute("user", username);
//end of new lines
...
사용자가 로그인하지 않은 경우 나, DataTable의에서 열을 숨길 필요가있다. 지금 내 문제는 내가 어떻게 내 Facelets의 페이지 내에서 세션 속성에 액세스 할 수 있습니까?
감사합니다. BalusC. 하지만 사용자를 뷰의 객체로 가져 왔습니다. 이런 식으로 "User @ 1a8b71e"가 나타났습니다. 어쨌든 나는 내 문제를 해결하기위한 답을 얻었습니다. 세션 설정 부분을 제거하고 LoginBean 클래스를 SessionScoped로 설정했습니다. 그리고 panelGroup 태그 내에서 값을 직접 가져올 수있었습니다. SQL advice에 대해 다시 한 번 감사드립니다. 준비된 문장을 사용하여 바꿨습니다. –
코드에 표시된'username'은 분명히'String'이 아닙니다. 아마도 질문에서 코드를 단순화했을 것입니까? 그런데 SQL 주석은 준비된 명령문에 대해 암시하지 않았습니다. 사용자 이름과 암호 **를 두 번 비교합니다 ** (DB에서 한 번, Java에서 이후 한 번). 이것은 말이되지 않습니다. DB가 하나의 레코드를 반환했는지 확인하십시오. 그게 전부입니다. 이미 확인하고 반환 할 DB를 묻는 사용자 이름/암호를 다시 비교할 필요가 없습니다. – BalusC
알았습니다! 하지만 마지막 SQL 쿼리에서 방금 Where 절에 username 만 사용했습니다. like : String query = "SELECT 사용자 이름, 비밀 번호 사용자 WHERE username = '"+ uname + "';"; 그래서 그냥 username.equals (getUsername_db() 부분을 제거 할 수 있습니다.이 경우에는 암호를 확인해야합니다 ... 제안을 주셔서 감사합니다. –