2012-07-13 260 views
0

我想從一個jsp頁面中'form'的下拉'選擇'列表中獲取一個選定的值到表單的action類中定義的變量中,其中'select'下拉列表本身是從數據庫表'Category'的列'name'中動態獲取的,列表'categoryList'是在另一個操作類中定義的。從下拉列表中選擇一個值時出錯選擇

獲取選定的值(這是類別的名稱)後,我想要獲取表'分類'的主鍵'cid'。類別的列是:ID,名稱

在檢索類別的'cid'後,我想在另一個表'Question'的列'cid'中填寫此cid。

我正在使用struts2和hibernate。

我的專欄是'名稱'和表'是'類別 我已經做了映射配置和bean類。

我的動作類的代碼,其中生成的列表:

<s:form action="okadddqs" method="post" cssClass="text"> 
           <input type="hidden" name="email" value="[email protected]"/> 
           <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="#@[email protected]{'1':'One', 
             '2':'Two','3':'Three','4':'Four','5':'Five'}"/> 
           <s:submit value="Update Daily Question"/> 
          </s:form> 

我的行動來提交新問題類:

在JSP頁面中的「形式」

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; 
    } 
} 

代碼

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:

豆 「Category.java」 的
<property name="name" type="string"> 
      <column name="NAME" length="20" not-null="true" /> 
     </property> 

getter和setter:

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] 

能有人請指出什麼可以b是出錯誤。 。? 在此先感謝。

+0

你爲什麼要從你的選擇列表中提交'cname'爲什麼不直接提交'cid'。這將減少您的操作類中不必要的代碼。還提到的錯誤是你的方式youu popu;在列表中不是在這個類別 – anu 2012-07-13 06:29:18

+0

其實我需要同時提交'cname'和相應的 – codeofnode 2012-07-13 07:29:55

+0

但是你在你的班級只使用'cname'來取回相應的'cid' from同一個表'Category'.So,爲什麼不直接從jsp那裏做並保存1個查詢。你是否將'canme'用於其他目的? – anu 2012-07-13 07:37:43

回答

1

的代碼,categoryListCategory類型的吸氣劑/二傳手

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動作

+0

@Rambo作爲根據你編輯的問題:你正在創建'categoryList'的代碼在哪裏?例外是因爲只有部分代碼。 – anu 2012-07-13 10:24:43

+0

謝謝..我只是執行你給的代碼。幾分鐘後我會回到問題的狀態。是的,我現在編輯我的問題與產生列表的行動類'FindCategory'的代碼。 – codeofnode 2012-07-13 10:36:16

+0

對不起,但代碼實際上沒有工作..提交後,我得到'cname'空白。什麼可以成爲探頭現在..?我已經制作了cname的getter和setter以及cid。 – codeofnode 2012-07-13 13:30:06

0

您的異常的根本原因來自'categoryList'代碼,如異常情況所述。

有關更多詳細信息,請參閱Find the error in Struts2 dropdown list program?。我很肯定你是在同一個問題上。

如果不是請張貼一些更多的代碼,優選被懷疑正如我們在評論討論遇到的問題(所屬分類變量及其getter和setter)

+0

感謝您的答案,但你給的鏈接是顯示下拉列表沒有其選項的問題。 對我來說。下拉列表具有並正確顯示其選項。但是它不允許將選定的值發送回另一個操作類opon按提交按鈕。 你可以指出現在的問題..? – codeofnode 2012-07-13 07:24:08

+0

請解決我的另一個問題在這裏http://stackoverflow.com/questions/11480674/how-to-automatically-copy-up-the-value-of-selected-option-of-dropdown-list-into – codeofnode 2012-07-14 05:57:55

相關問題