0
페이지가로드 될 때 f : 이벤트를 실행하려고합니다. f:event
은 백업 빈 기능 init()
과 연관됩니다. init()
은 함수에 사용되는 세션 개체 toIndex
을 만듭니다. 하지만 내가 직면하고있는 문제는 getStatusList()
funciton이 먼저 실행되고 따라서 toIndex
세션 개체를 찾을 수없고 null 포인터 예외가 발생한다는 것입니다. init()
함수는 호출되지 않습니다. StatusBean
은 세션 범위입니다.f의 실행 순서 : 예외를 일으키는 이벤트
1) XHTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core">
<f:view>
<f:event type="postAddToView" listener="#{statusBean.init}" ></f:event>
</f:view>
<h:head></h:head>
<h:body>
<c:forEach var="p" items="#{statusBean.statusList}"
varStatus="loop">
//content
</c:forEach>
</h:body>
</html>
2) 백업 콩
public class StatusBean {
public List<Status> getStatusList() {
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext()
.getSession(true);
User user = (User) session.getAttribute("userdet");
Query query = em.createQuery("SELECT s FROM Status s WHERE s.email='"
+ user.getEmail() + "' ORDER BY s.timeMillis desc",
Status.class);
List<Status> results = query.getResultList();
Collections.sort(results);
int toIndex = (int) session.getAttribute("toIndex");
List<Status> subList = results.subList(0, toIndex);
return subList;
}
public void init(ComponentSystemEvent event) {
System.out.println("inside init");
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(true);
int toIndex = 5;
session.setAttribute("toIndex",toIndex);
}
}
사실 나는'ui : repeat'를 사용하여 시도했지만 문제가 있었으며 심지어'h : dataTable' 같은 대/소문자를 사용하려고했습니다. 그래서 나는'c : forEach' 옵션 만 남겨 두었습니다. 'getStatusList' 전에'init'을 트리거 할 수있는 대안이 있습니까? –
'ui : repeat'의 문제점은 무엇입니까? 일반적으로 JSF와의 더 나은 통합으로 비슷한 동작을 보일 것입니다. – Michi
http://stackoverflow.com/questions/12501700/submit-not-working-inside-uirepeat. 내 질문을 확인해보십시오. 나는 오랫동안 그것을 뒤로 게시했다 –