登录后使用数据库中的数据填充selectOneMenu

时间:2013-03-28 14:27:46

标签: java jsf-2 primefaces converter

该项目由Primefaces 3.5,JSF 2.0,Oracle数据库组成。

首先,用户需要登录。登录后,它会重定向到“议程”。此页面包含一个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.

Agenda.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充满了所有的资源,现在我必须用只有已经登录的用户可用的资源来填充它。我的问题是我无法从任何地方获取参数,所以我可以使用我喜欢的方法:

它不会让我把非静态变量放在静态(innit)方法中。

但我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我可以从您的问题中得到的结果是您想要尝试登录的用户的userId,并且取决于您要激活查询的userId 所以,在检查用户进行身份验证时,您需要从(DAO到Controller)返回userId,然后在模型中设置userId 然后得到相同的userId进行进一步处理