该项目由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)方法中。
但我该如何解决这个问题?
答案 0 :(得分:0)
我可以从您的问题中得到的结果是您想要尝试登录的用户的userId,并且取决于您要激活查询的userId 所以,在检查用户进行身份验证时,您需要从(DAO到Controller)返回userId,然后在模型中设置userId 然后得到相同的userId进行进一步处理