国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Struts 2.0 <s:select>
 
發(fā)表于 2009-2-9 22:17  資料  個(gè)人空間  短消息  加為好友 
Struts 2.0 <s:select> 出現(xiàn)問題的解決方法

今天在使用Struts 2.0 <s:select>標(biāo)簽的時(shí)候碰到了錯(cuò)誤:

tag 'select', field 'list', name 'university': The requested list key 'universities' could not be resolved as a collection/array/map/enumeration/iterator type.

google,baidu找了很多方法,都無法解決,后來終于發(fā)現(xiàn)了問題所在,其實(shí)是小問題,在這里總結(jié)一下,以便大家以后會(huì)出現(xiàn)同類錯(cuò)誤。
<s:select>是下拉列表的標(biāo)簽,有很多種用法,例如直接指定一個(gè)列表,為其賦值:

<s:select name="university" headerKey="-1" headerValue="請(qǐng)選擇" list="{'華南理工大學(xué)', '華中科技大學(xué)', '福州大學(xué)'}"/>

有時(shí)候,我們需要從數(shù)據(jù)庫里面取得所謂的“數(shù)據(jù)字典”,填充到下拉列表中,

先來看看具體的代碼吧:

register.jsp的部分代碼片段:

<form id="form1" action="register.action" method="POST">
           <s:select name="university" headerKey="-1" headerValue="請(qǐng)選擇" list="universities" listKey="uniId" listValue="uniName"/>
</form>

list屬性指定了一個(gè)變量universities,這個(gè)變量是register這個(gè)action的一個(gè)成員屬性,其類型是List<University>:

…………

public class Register extends ActionSupport {
    private List<University> universities;

    public List<University> getUniversities() {
        return universities;
    }

    public void setUniversity(String university) {
        this.university = university;
    }

    @Override
    public String execute() throws Exception {
       universities = uniService.getUniversityList();
       …………
    }
}

這里省略了很多東西,只是為了說明select標(biāo)簽的用法,uniService.getUniversityList()可以從數(shù)據(jù)庫中獲取一個(gè)University的列表,這里省略了uniService的聲明和AutoWire。當(dāng)然,除了用List以外,還可以用Map。

struts.xml和Spring的配置文件把register這個(gè)action映射到Register.java。具體如何整合Struts 2.0,Spring和Hibernate,網(wǎng)上很多教程,也可以參考Netbeans下的:

http://developers.sun.com.cn/blog/functionalca/category/JavaEE

這里省略具體細(xì)節(jié)。

如果我們直接運(yùn)行register.jsp,將會(huì)得到我們開頭所描述的錯(cuò)誤,其實(shí)原因很簡單,因?yàn)榈谝淮芜\(yùn)行這個(gè)頁面的時(shí)候,Register這個(gè)action根本沒有被實(shí)例化,因此也就沒有universities這個(gè)變量。那怎么辦呢?很簡單,首先,在register.jsp前面加一個(gè)頁面,例如index.jsp:

         <s:url id="regForm" action="register">
            <s:param name="type">getForm</s:param>
        </s:url>
        <s:a href="%{regForm}">注冊(cè)</s:a>

這個(gè)頁面里面很簡單,定義了一個(gè)url,這個(gè)url會(huì)提交register這個(gè)action,然后再定義一個(gè)超鏈接指向這個(gè)url。這樣,當(dāng)用戶點(diǎn)擊超鏈接的時(shí)候,action就會(huì)被實(shí)例化,universities這個(gè)變量也就可以得到了。type這個(gè)屬性有什么用呢?先來看看我們需要在action的execute方法做一些改動(dòng):

       public String execute() throws Exception {
         if (type != null && type.equals("getForm")) {
            universities = uniService.getUniversityList();
            return INPUT;
        }

        if (type != null && type.equals("submit")) {
           …………
        }
      }

由于我們的表單可能會(huì)再一次提交(例如注冊(cè)),因此必須區(qū)分是初始化頁面,還是要提交頁面。用一個(gè)屬性來區(qū)別就可以了。當(dāng)然,我們還需要在register.jsp里面聲明一個(gè)這樣的屬性,否則再一次提交表單的時(shí)候這個(gè)變量就取不到了:

      <input type="hidden" name="type" value="submit"/>

最后,運(yùn)行index.jsp,點(diǎn)擊超鏈接,頁面就能正常顯示了。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
超簡單方法解決Struts2中一個(gè)action處理多個(gè)請(qǐng)求 - 左手可樂 右手白菜 - J...
Web項(xiàng)目的WEB
Struts防止表單重復(fù)提交
Struts2的struts.xml中配置及通配符的使用
JSTL與Struts的結(jié)合(四)
struts2 jsp頁面獲取屬性值
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服