0

このプロジェクトは、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) メソッドに入れることはできません。

しかし、どうすればこの問題を解決できますか?

4

1 に答える 1

0

私があなたの問題から理解できるのは、ログインしようとしているユーザーのユーザーIDが必要であり、そのユーザーIDに応じてクエリを起動したいので、ユーザーの認証を確認するときに、(DAOからユーザーIDを返す必要があることです) Controller に)、モデル内で userId を設定し、さらに処理するために同じ userId を取得します

于 2013-03-29T06:26:16.600 に答える