1

私の問題はRichFaces4.1.0の選択リストにあります。左側と右側にデータを入力できるアイテムが機能しています。右側(つまりemployeeBean.target)からデータを取得できません。理由はわかりません。誰かがこのコードを見て、どこが間違っているのか教えてくれませんか。

意見:

<rich:panel style="width:560px;">
            <h:form>
                <rich:pickList value="#{employeeBean.target}" var="emp" id="picklist"
                               sourceCaption="Available" targetCaption="Selected"
                               orderable="false"  converter="employeeConverter">
                    <f:selectItems value="#{employeeBean.source}" var="employee" itemValue="#{employee}" />
                    <f:converter converterId="employeeConverter" />
                </rich:pickList>
            </h:form>
            jobcardBean bean = #{employeeBean.target}
        </rich:panel>

コントローラ:

    @ManagedBean
@ViewScoped
public class EmployeeBean implements Serializable {

    private static final long serialVersionUID = 1L;
    List<Employee> source;
    List<Employee> target;

    public EmployeeBean() {
    }

    public List<Employee> getSource() {
        return new DatabaseBean().getAllEmployees();
    }

    public void setSource(List<Employee> source) {
        this.source = source;
    }

    public List<Employee> getTarget() {
        return target;
    }

    public void setTarget(List<Employee> target) {
        this.target = target;
    }

/ * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * **** /

    @FacesConverter(value = "employeeConverter")
public class EmployeeConverter implements Converter {

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

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

モデル:

public String toString() {
    return getName() + " " + getSurname();
}

@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (!(obj instanceof Employee)) {
        return false;
    }

    return ((Employee) obj).getName() == this.name && ((Employee) obj).getSurname() == this.surname;
}

@Override
public int hashCode() {
    int hash = 1;
    return hash * 31 + name.hashCode();
}
4

1 に答える 1

0

私の問題は私のコンバーターにありました。ここにあるgetAsObjectは文字列を受け取り、文字列を渡します。メソッドはコンパイルされますが、有用なことは何もしません。getAsObjectに文字列だけでなく、モデルBeanオブジェクトを返すようにすることで、これを修正しました。

于 2012-06-17T18:44:37.913 に答える