下拉框動態實現

來源:互聯網
上載者:User

題目是這樣的
有兩張表
一張為新聞類別表
有2個欄位:

nid(pk)         sort

有一張新聞內容表

有三個欄位

cid(pk)       nid(fk)     title     content

要求通過下拉式清單方塊的方法選擇新聞類別然後顯示該類別的新聞標題(在當前頁中顯示)
 我是用Struts2+Hibernate3.2+JPA實現的.
資料庫指令碼:
create database if not exists news;
drop table if exists newssort;
create table newssort
(
  nid int primary key AUTO_INCREMENT,
  sort varchar(50)
);

drop table if exists news;
create table news
(
  cid int primary key AUTO_INCREMENT,
  title varchar(50) not null,
  content varchar(500) not null,
  nid  int null
);

insert into newssort values(null,'娛樂');
insert into newssort values(null,'時事');

insert into news values(null,'好事','好事連連哈哈',1);
insert into news values(null,'壞事','壞事不斷',1);
insert into news values(null,'愛情是什麼','愛情是什麼啊,還沒知道呢',2);
insert into  news values(null,'什麼啊','測試內容',2);

select * from news;
select * from newssort;
兩個VO類:
News.java:
package com.vo;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@SuppressWarnings("serial")
@Entity
@Table(name="news")
public class News implements Serializable
{
    private Integer cid;
    private String title;
    private String content;
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Integer getCid()
    {
        return cid;
    }

    public void setCid(Integer cid)
    {
        this.cid = cid;
    }

    public String getTitle()
    {
        return title;
    }

    public void setTitle(String title)
    {
        this.title = title;
    }

    public String getContent()
    {
        return content;
    }

    public void setContent(String content)
    {
        this.content = content;
    }
}
Newssort.java:
package com.vo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

@SuppressWarnings("serial")
@Entity
@Table(name = "newssort")
public class Newssort implements Serializable
{
    private Integer nid;
    private String sort;
    private List<News> news = new ArrayList<News>();
    @OneToMany
    @JoinColumn(name="nid")
    @LazyCollection(LazyCollectionOption.FALSE)
    public List<News> getNews()
    {
        return news;
    }

    public void setNews(List<News> news)
    {
        this.news = news;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Integer getNid()
    {
        return nid;
    }

    public void setNid(Integer nid)
    {
        this.nid = nid;
    }
   
    public String getSort()
    {
        return sort;
    }

    public void setSort(String sort)
    {
        this.sort = sort;
    }
}

寫個測試類別先測試一個持久層操作:
package com.test;

import java.util.Iterator;
import org.hibernate.Session;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.After;
import org.junit.Before;

import com.vo.News;
import com.vo.Newssort;
public class Test
{
    private Session session ;
    @Before
    public void setUp()
    {
        session = new AnnotationConfiguration().configure().buildSessionFactory().openSession();
    }
    @After
    public void tearDown()
    {
        session.close();
    }
   
    @SuppressWarnings("unchecked")
    @org.junit.Test
    public void testFind()
    {
        @SuppressWarnings("unused")
        //List<Newssort> newssort = session.createCriteria(Newssort.class).list();
        Newssort newssort = (Newssort) session.load(Newssort.class, 2);
        for(Iterator<News> i = newssort.getNews().iterator();i .hasNext();)
        {
            String title = i.next().getTitle();
            System.out.println(title);
        }
    }
}
好了寫Action
NewsAction:
package com.web.action;

import java.util.List;
import java.util.Map;

import org.hibernate.Session;
import org.hibernate.cfg.AnnotationConfiguration;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.vo.News;
import com.vo.Newssort;

@SuppressWarnings( { "serial", "unchecked" })
public class NewsAction extends ActionSupport
{
    private Session session;
    private Integer sortid;

    public Integer getSortid()
    {
        return sortid;
    }

    public void setSortid(Integer sortid)
    {
        this.sortid = sortid;
    }

    public void init()
    {
        session = new AnnotationConfiguration().configure()
                .buildSessionFactory().openSession();
    }

    public String findNewssort()
    {
        this.init();
        List<Newssort> sorts = session.createCriteria(Newssort.class).list();
        Map request = (Map) ActionContext.getContext().get("request");
        request.put("sorts", sorts);
        session.close();
        return SUCCESS;
    }
   
    public String findNews()
    {
        this.init();
        System.out.println("findNews");
        List<Newssort> sorts = session.createCriteria(Newssort.class).list();
        Newssort newssort = (Newssort) session.load(Newssort.class, sortid);
        List<News> news = newssort.getNews();
        Map request = (Map) ActionContext.getContext().get("request");
        request.put("sorts", sorts);
        request.put("news", news);
        session.close();
        return SUCCESS;
    }
}

hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/news</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="show_sql">true</property>
        <!-- 實體類映射 -->
        <mapping class="com.vo.News"/>
        <mapping class="com.vo.Newssort"/>
    </session-factory>
</hibernate-configuration>   
struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <package name="com" extends="struts-default">
        <action name="findNewssort" class="com.web.action.NewsAction" method="findNewssort">
            <result name="success">/index.jsp</result>
        </action>
       
        <action name="findNews" class="com.web.action.NewsAction" method="findNews">
            <result name="success">/index.jsp</result>
        </action>
    </package>
</struts>   
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>prepare.jsp</welcome-file>
    </welcome-file-list>
</web-app>

前台有兩個jsp:
prapare.jsp:
<%@ page language="java" pageEncoding="GB18030"%>
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
    <script type="text/javascript">
        window.location = "findNewssort.action";
    </script>
  </head>
  <body>
  </body>
</html>

index.jsp:
<%@ page language="java" pageEncoding="GB18030"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
    <script type="text/javascript">
        function findNews()
        {
            var sort = document.getElementById("sort");
            window.location = "findNews.action?sortid=" + sort.value;
        }
    </script>
  </head>
  <body>
      <select id="sort" name="sortid" onchange="findNews();">
      <option>請選擇</option>
          <s:iterator value="#request['sorts']" id="sort" >
              <option value="<s:property value='#sort.nid'/>" ><s:property value="#sort.sort" /></option>
          </s:iterator>
      </select>
      <hr />
      <s:iterator value="#request['news']" id="news">
          <s:property value="#news.title"/><br />
      </s:iterator>
  </body>
</html>

好了,一切OK,開啟瀏覽器測試一切正常.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.