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]
誰かがエラーを引き起こす可能性があるものを指摘できますか..?前もって感謝します。