2013-03-28 1 views
0

이 프로젝트는 Primefaces 3.5, JSF 2.0, Oracle 데이터베이스로 작성되었습니다.로그인 후 데이터베이스의 데이터로 selectOneMenu 채우기

먼저 사용자가 로그인해야합니다. 로그인 후 "Agenda"로 리디렉션됩니다. 이 페이지는. 로그인 된 사용자에 따라 데이터로 가득받을 필요가 selectOneMenu을 포함

Login.xhtml

<p:inputText style="text-transform: uppercase" value="#{loginBean.username}" 
          id="username" required="true" label="username" /> 
        <h:outputLabel for="password" value="Password: " /> 
        <h:inputSecret value="#{loginBean.password}" 
          id="password" required="true" label="password" /> 

내 LoginBean.java

sets and get my userId which i need to identify my user 
also handles my loginrequest. 

의제. XHTML

<p:selectOneMenu value="#{orResourcesBean.orResource}" converter="resourcesConverter" var="orResource" 
         style="width:250px" filter="true" filterMatchMode="startsWith"> 
      <f:selectItem itemLabel="Select Resource" itemValue="" /> 
      <f:selectItems value="#{orResourcesBean.orResources}" var="orResource" itemLabel="#{orResource.RLname} #{orResource.RFname}" 
          itemValue="#{orResource}" /> 
       <p:column> 
        #{orResource.RLname} 
       </p:column> 
       <p:column> 
        #{orResource.RFname} 
       </p:column> 
     </p:selectOneMenu> 

OrResourcesbean.java

@ManagedBean(name="orResourcesBean") 
@SessionScoped 
public class OrResourcesBean implements Serializable { 

private OrResources orResource; 
private List<OrResources> orResources; 

public void setOrResource(OrResources orResource) 
{ 
    this.orResource = orResource; 
} 

public OrResources getOrResource() { 
    return orResource; 
} 

public List<OrResources> getOrResources() { 
    orResources = ResourcesConverter.resources; 
    return orResources; 
}  

}

ResourcesConverter.java

public static List<OrResources> resources; 
static OrResourcesDao orResourceDao = new OrResourcesDaoImpl(); 

public Integer uKey; 

{ 
    LoginBean loginBean = (LoginBean) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("loginBean"); 
    if (loginBean != null) { 
     uKey = loginBean.getUKey(); 
     if (uKey == null) { 
      resources = null; 
     } else { 
      resources = orResourceDao.getOrResourcesById(uKey); 
     } 
    } else { 
     resources = null; 
    } 
} 

@Override 
public Object getAsObject(FacesContext facesContext, UIComponent component, String submittedValue) { 
    if (submittedValue.trim().equals("")) { 
     return null; 
    } else { 
     try { 
      String number = submittedValue; 

      for (OrResources orR : resources) { 
       if (orR.getRCode().equals(number)) { 
        return orR; 
       } 
      } 
     } catch(NumberFormatException exception) { 
      throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid resource")); 
     } 
    } 
    return null; 
} 

@Override 
public String getAsString(FacesContext context, UIComponent component, Object value) { 
    if (value == null || value.equals("")) { 
     return ""; 
    } else { 
     return String.valueOf(((OrResources) value).getRCode()); 
    } 
} 

그래서 당신은 내 Agenda.xhtml에서 selectOneMenu가 모든 자원으로 가득 볼 수 업데이트] WORKING 기능, 지금은해야 로그인 한 사용자가 사용할 수있는 리소스로만 채우십시오. 내 문제는 내가 어디에서나 매개 변수를 가져올 수 없기 때문에 내 제멋대로 메서드를 만들 수 있습니다.

정적이 아닌 변수를 static (innit) 메서드에 넣지 않겠습니다.

하지만 어떻게이 문제를 해결할 수 있습니까?

답변

0

당신이 문제를 해결할 수있는 것은 당신이 로그인하려고하는 사용자의 userId를 원하고 당신이 질문을하고자하는 userId에 따라 달라질 것입니다. 그래서 인증을 위해 사용자를 확인할 때 userId를 (DAO에서 Controller로) 반환 한 다음 모델에서 userId를 설정하십시오. 다음 처리를 위해 동일한 userId를 얻으십시오.

관련 문제