このプロジェクトは、Primefaces 3.5、JSF 2.0、Oracle データベースで作成されています。
まず、ユーザーはログインする必要があります。ログイン後、「議題」にリダイレクトされます。このページには、ログインしているユーザーに応じてデータを入力する必要がある selectOneMenu が含まれています。
ログイン.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 メソッドを作成できます。
非静的変数を静的 (init) メソッドに入れることはできません。
しかし、どうすればこの問題を解決できますか?