비슷한 질문을 검색했지만 다소 혼란 스럽다. 나는 LoginBean을 가지고있다;JSF의 다른 bean에서 managedbean 등록 정보를 얻는 방법
@ManagedBean(name = "loginBean")
@SessionScoped
public class LoginBean implements Serializable {
private String password="";
private String image="";
@ManagedProperty(value = "#{loginBeanIdentityNr}")
private String identityNr="";
...
성공한 후 주문 목록 페이지로 이동하므로 OrderBean도 있습니다.
@ManagedBean(name = "OrderBean")
@SessionScoped
public class OrderBean {
List<Ordery> sdList;
public List<Order> getSdList() {
try {
String identityNr ="";
ELContext elContext = FacesContext.getCurrentInstance().getELContext();
LoginBean lBean = (LoginBean) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "loginBean");
identityNr =lBean.getIdentityNr();
sdList = DatabaseUtil.getOrderByIdentityNr(identityNr);
...
}
전체 LoginBean이 필요하지 않으며 ManagedProperty "loginBeanIdentityNr"입니다. 그러나 아래의 코드는 (물론) 작동하지 않습니다.
identityNr = (String) FacesContext.getCurrentInstance()
.getApplication().getELResolver()
.getValue(elContext, null, "loginBeanIdentityNr");
이번에는 null을 반환합니다. 전체 bean 속성이 필요하면이 콩을 주입 할 수 있다고 생각합니다. 그렇다면이 접근법에 대한 제안 사항이 있습니까? 수 <f:attribute>
사용할 수 있습니까?
안녕하세요 BalusC하지만 이번에는 OrderBean에서 loginbean의 불필요한 속성을 갖게 될 것입니다. 프로그램을위한 힙 낭비가 아닌가? 신원 확인이 필요해. 보안 문자 값 또는 이름이 아닙니다. – asyard
어, 그냥 참고서 일뿐입니다. 전체 콩을 메모리에 복사하지 않습니다. ** 세션에서 이미 가지고있는 bean과 똑같은 ** bean을 가리 킵니다. Java는 절차 지향적 인 것이 아니라 객체 지향적입니다. 심지어 자바 빈즈 대신에 문자열을 이중 참조하는 것은 잠재적으로 더 비쌉니다. – BalusC
답변 해 주셔서 감사합니다. 나는 충분한 평판을 얻 자마자 모든 답을 투표 할 것이다. :) 그러나 호기심이 많은가, facescontext.getblabla() .. 또는 jsf 페이지에 주입하지 않고 다른 방법이 있는가? – asyard