0

jspページの「form」のドロップダウン「select」リストからフォームのアクションクラスで定義された変数に選択した値をフェッチしたい。「select」ドロップダウンリスト自体が列から動的にフェッチされる。データベーステーブルの名前'Category'と、別のアクションクラスで定義されているリスト'categoryList'。

選択した値(つまり、Categoryの名前)をフェッチした後、テーブル'Category'の主キー'cid'をフェッチしたいと思います。カテゴリの列は次のとおりです:id、name

カテゴリの「cid」を取得した後、このcidを別のテーブル「Question」の「cid」列に入力します。

struts2と休止状態を使用しています。

私の列は「name」で、テーブルは「Category」です。マッピング構成とBeanクラスを作成しました。

リストが生成される私のアクションクラスのコード:

public class FindCategory extends ActionSupport {

    private List<Category> categoryList = new ArrayList<Category>();

    @Override
    public String execute() throws Exception {
        Session session = null;
        try {
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            this.categoryList = (List<Category>) session.createQuery("from Category").list();
            if (this.categoryList.isEmpty()) {
                this.addActionError("Sorry.. No category Available. Try again Later.!");
                return ERROR;
            }
            session.getTransaction().commit();
        } catch (Exception e) {
            this.addActionError("Oops. An Error Encountered...!");
            return ERROR;
        }
        return SUCCESS;
    }

    public List<Category> getCategoryList() {
        return categoryList;
    }

    public void setCategoryList(List<Category> categoryList) {
        this.categoryList = categoryList;
    }
}

jspページの「形式」のコード:

<s:form action="okadddqs" method="post" cssClass="text">
                                <input type="hidden" name="email" value="goods.ramesh@gmail.com"/>
                                <s:select label="Select Category :" name="name" list="categoryList" listkey="name" listValue="name"/> //Here the list is generated
                                <s:textarea label="Your Question " cols="40" rows="5" name="body"/>
                                <s:textfield name="op1" label="Option 1 :"/>
                                <s:textfield name="op2" label="Option 2 :"/>
                                <s:textfield name="op3" label="Option 3 :"/>
                                <s:textfield name="op4" label="Option 4 :"/>
                                <s:textfield name="op5" label="Option 5 :"/>
                                <s:select label="Correct Option :" 
                                         name="opc"       
                                         list="#@java.util.LinkedHashMap@{'1':'One',
                                         '2':'Two','3':'Three','4':'Four','5':'Five'}"/>
                                <s:submit value="Update Daily Question"/>
                            </s:form>

新しい質問クラスを送信するための私のアクション:

package com.rambo.action;

import beans.Category;
import beans.Question;
import beans.Users;
import com.opensymphony.xwork2.ActionSupport;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.hibernate.Session;

/**
 *
 * @author ROMO
 */
@ManagedBean
@SessionScoped
public class NewQuestion extends ActionSupport {

    private String cname;

    private List<Category> cl = new ArrayList<Category>();


    public List<Category> getCl() {
        return cl;
    }

    public void setCl(List<Category> cl) {
        this.cl = cl;
    }

    @Override
    public String execute() throws Exception {

        Session session = null;
        int c;
        //c store the cid of the selected Category name from drop down list.
        try {
            session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            cl = (List<Category>) session.createQuery("from Category c where c.name = '" + getName() + "'");
            if (!cl.isEmpty()) {
                c = cl.get(0).getCid();
            } else {
                this.addActionError("Oops. Sorry No Category Available.");
                session.close();
                return ERROR;
            }

            u = new Question();
            u.setCid(c);
            u.setCname(getName());
            session.save(u);
            session.getTransaction().commit();
        } catch (Exception e) {
            this.addActionError("Oops. An Error Encountered...! Email address already registered. Try with your new email address.");
            session.close();
            return ERROR;
        }
        return SUCCESS;
    }


    @Override
    public void validate() {
        if ("".equals(getEmail()) || getEmail() == null ) {
            this.addActionError("All Fields are Compulsory to input..!");
        } else if (getEmail().indexOf("@") < 0 || getEmail().indexOf(",") > 0 || getEmail().indexOf(".") < 0) {
            this.addActionError("Please Input a valid email address.");
        }
    }
}

Category.hbm.xmlでのマッピング:

<property name="name" type="string">
            <column name="NAME" length="20" not-null="true" />
        </property>

Bean「Category.java」のゲッターとセッター:

public String getName() {
    return this.name;
}

public void setName(String name) {
    this.name = name;
}

私のglassfishサーバーは次のようなエラーを表示します:

org.apache.jasper.JasperException: tag 'select', field 'list', name 'cname': The requested list key 'categoryList' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]

root cause tag 'select', field 'list', name 'cname': The requested list key 'categoryList' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]

誰かがエラーを引き起こす可能性があるものを指摘できますか..?前もって感謝します。

4

2 に答える 2

1

コメントで説明したように、getter/setter を持つcategoryList型にする必要がありますCategory

List<Category> categoryList

次に、あなたのjspで

<s:select label="Select Category :"
       name="cid"
       id="cid"
       list="categoryList"
       listKey="id"
       listValue="name"
/>

フォームで非表示フィールドを宣言して、送信することcnameもできます。cid

<s:hidden name="cname" id="cname"/>

設定するjQuery コード(要求に応じて)cname

$("#cid").change(function(){
  $("#cname").val($(this).find("option:selected").text());
});

アクションでcid&変数を宣言する必要がありcnameます (getter/setter を使用)NewQuestion

于 2012-07-13T10:11:58.733 に答える
0

例外が示すように、例外の根本的な原因は「categoryList」コードから来ています。

Struts2 ドロップダウン リスト プログラムでエラーを見つけますか? を参照してください。詳細については 。あなたが同じ問題を抱えていると確信しています。

そうでない場合は、さらにコードを投稿してください。できれば、問題があると思われるコード (categoryList 変数とそのゲッターとセッター) を投稿してください。

于 2012-07-13T06:22:07.600 に答える