java 进度条投票javascript
第一步 表结构:见附件 sql.txtcss
第二步: java 类 和actionhtml
package com.fte.home.dao.impl;java
import java.util.List;jquery
import java.util.Map;git
import org.jnv.framework.dao.BaseSpringJdbcDAO;ajax
import com.fte.home.dao.IVoteDao;spring
import com.fte.home.domain.VoteStatisticsBean;sql
public class VoteDaoImpl implements IVoteDao {dom
private BaseSpringJdbcDAO baseSpringJdbcDAO;
@Override
public void addVoteLog(String ip, int problemId, int answerId) {
String sql="INSERT INTO FTE_VOTE_LOG(USER_IP,PROBLEM_ID,ANSWER_ID) VALUES(?,?,?);";
Object[] params={ip,problemId,answerId};
baseSpringJdbcDAO.getJdbcTemplate().update(sql,params);
}
@Override
public boolean existsUserIpInVoteLog(String ip) {
String sql="SELECT COUNT(1) FROM FTE_VOTE_LOG WHERE USER_IP=?";
Object[] params={ip};
return baseSpringJdbcDAO.getJdbcTemplate().queryForInt(sql,params)>0;
}
@Override
public List<Map<String,Object>> getAllVoteProblemList(){
String sql="SELECT ID,PROBLEM FROM FTE_VOTE_PROBLEM";
return baseSpringJdbcDAO.getJdbcTemplate().queryForList(sql);
}
@Override
public List<Map<String, Object>> getStatisticsAllVoteStatisticsList() {
String sql="SELECT A.PROBLEM_ID,A.ANSWER_ID,A.ANSWER_SUM FROM FTE_VOTE_STATISTICS A";
return baseSpringJdbcDAO.getJdbcTemplate().queryForList(sql);
}
@Override
public List<Map<String, Object>> getVoteStatisticsList() {
String sql="SELECT A.PROBLEM_ID,A.ANSWER_ID,(SELECT B.ANSWER FROM FTE_VOTE_ANSWER B WHERE B.ID=A.ANSWER_ID) AS ANSWER,A.ANSWER_SUM,A.PROPORTION FROM FTE_VOTE_STATISTICS A";
return baseSpringJdbcDAO.getJdbcTemplate().queryForList(sql);
}
@Override
public List<Map<String, Object>> getVoteStatisticsListByProblemID(int problemId) {
String sql="SELECT ANSWER_SUM,PROPORTION,ANSWER_ID FROM FTE_VOTE_STATISTICS WHERE PROBLEM_ID=?";
Object[] params={problemId};
return baseSpringJdbcDAO.getJdbcTemplate().queryForList(sql,params);
}
@Override
public void updateVoteStatistics(int problemId,int answerId) {
String sql="UPDATE FTE_VOTE_STATISTICS SET ANSWER_SUM=ANSWER_SUM+1 WHERE PROBLEM_ID=? AND ANSWER_ID=?";
Object[] params={problemId,answerId};
baseSpringJdbcDAO.getJdbcTemplate().update(sql,params);
}
public void setBaseSpringJdbcDAO(BaseSpringJdbcDAO baseSpringJdbcDAO) {
this.baseSpringJdbcDAO = baseSpringJdbcDAO;
}
@Override
public int getVoteSumByProblemID(int problemId) {
String sql="SELECT SUM(ANSWER_SUM) AS SUM FROM FTE_VOTE_STATISTICS WHERE PROBLEM_ID=?";
Object[] params={problemId};
return baseSpringJdbcDAO.getJdbcTemplate().queryForInt(sql,params);
}
@Override
public void staticticVoteProportionByProblemID(int problemId,int answerId,float proportion,int answerSum) {
String sql="UPDATE FTE_VOTE_STATISTICS SET ANSWER_SUM=?, PROPORTION=? WHERE PROBLEM_ID=? AND ANSWER_ID=?";
Object[] params={answerSum,proportion,problemId,answerId};
baseSpringJdbcDAO.getJdbcTemplate().update(sql,params);
}
}
package com.fte.home.service.impl;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import com.fte.home.dao.IVoteDao;
import com.fte.home.domain.VoteStatisticsBean;
import com.fte.home.service.IVoteService;
public class VoteServiceImpl implements IVoteService {
private IVoteDao voteDao;
@Override
public void addVoteLog(String ip, int problemId, int answerId) {
voteDao.addVoteLog(ip, problemId, answerId);
}
@Override
public void doVoteSubmit(String ip,String subStr){
String[] substrs=subStr.split(",");
for(String str:substrs){
int problemId=Integer.parseInt(str.substring(0,1));
int answerId=Integer.parseInt(str.substring(2));
//保存日志
addVoteLog(ip, problemId, answerId);
voteDao.updateVoteStatistics(problemId, answerId);
}
// statisticsVote("==="+subStr); //计算并保存投票统计
}
/**
* 计算并保存投票统计
* @param substrs
*/
public void statisticsVote(String substrs){
List<Map<String, Object>> pblist=voteDao.getStatisticsAllVoteStatisticsList();
for(int i=0;i<pblist.size();i++){
Map<String,Object> map=pblist.get(i);
int problemId=Integer.parseInt(map.get("PROBLEM_ID").toString());
int sum=voteDao.getVoteSumByProblemID(problemId);
int asId=Integer.parseInt(map.get("ANSWER_ID").toString());
int prsum=Integer.parseInt(map.get("ANSWER_SUM").toString());
boolean isAdd=false;
String bijiao=problemId+"_"+asId;
if(substrs.indexOf(bijiao)>0){
isAdd=true;
}
prsum=isAdd?prsum+1:prsum;
sum=isAdd?sum+1:sum;
float proportion=statisticsProportion(prsum,sum);
voteDao.staticticVoteProportionByProblemID(problemId, asId, proportion,prsum);
}
}
/**
* 计算并保存投票统计
*/
public void statisticsVote(){
List<Map<String, Object>> pblist=voteDao.getStatisticsAllVoteStatisticsList();
for(int i=0;i<pblist.size();i++){
Map<String,Object> map=pblist.get(i);
int problemId=Integer.parseInt(map.get("PROBLEM_ID").toString());
int sum=voteDao.getVoteSumByProblemID(problemId);
int asId=Integer.parseInt(map.get("ANSWER_ID").toString());
int prsum=Integer.parseInt(map.get("ANSWER_SUM").toString());
float proportion=statisticsProportion(prsum,sum);
voteDao.staticticVoteProportionByProblemID(problemId, asId, proportion,prsum);
}
}
public float statisticsProportion(int prsum,int sum){
java.text.NumberFormat nf = java.text.NumberFormat.getPercentInstance();
nf.setMinimumFractionDigits(2);// 小数点后保留几位
String str = nf.format(Double.parseDouble(prsum+".0")/Double.parseDouble(sum+".0"));
return Float.parseFloat(str.substring(0,str.length()-1));
}
@Override
public boolean existsUserIpInVoteLog(String ip) {
return voteDao.existsUserIpInVoteLog(ip);
}
public static void main(String[] args){
System.out.println(getBaifenbi(2,11));
System.out.println(getBaifenbi(6,11));
System.out.println(getBaifenbi(3,11));
}
public static String getBaifenbi(double p1,double p2){
String str;
double p3=p1/p2;
NumberFormat nf=NumberFormat.getPercentInstance();
nf.setMinimumFractionDigits(2);
str=nf.format(p3);
return str;
}
/**
* 根据抽奖问题ID 得到相对应的统计集合
* @param problemId
* @return
*/
@Override
public List<Map<String, Object>> getVoteStatisticsListByProblemID(int problemId){
return voteDao.getVoteStatisticsListByProblemID(problemId);
}
@Override
public List<Map<String, Object>> getVoteStatisticsList() {
return voteDao.getVoteStatisticsList();
}
@Override
public void updateVoteStatistics(int problemId,int answerId) {
}
public void setVoteDao(IVoteDao voteDao) {
this.voteDao = voteDao;
}
@Override
public List<Map<String, Object>> getStatisticsAllVoteStatisticsList() {
return voteDao.getAllVoteProblemList();
}
}
Action 以下:
package com.fte.home.representation.struts.action;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.v.data.util.IpAddressUtils;
import com.fte.home.page.action.FteBaseAction;
import com.fte.home.service.IVoteService;
public class VoteAction extends FteBaseAction {
private IVoteService voteService;
/**
* 得到抽奖的统计集合
*
* @return
*/
public String voteStatisticsList() {
String problemId=getParameter("problemId");
List list = voteService.getVoteStatisticsList();
List statiList=voteService.getStatisticsAllVoteStatisticsList();
String str = "";
String stat="";
if(statiList!=null && statiList.size()>0){
stat+="[";
for(int j=0;j<statiList.size();j++){
Map m=(Map)statiList.get(j);
stat+="{id:'"+m.get("ID")+"',";
if(j+1<statiList.size()){
stat+="problem:'"+m.get("PROBLEM")+"'},";
}else{
stat+="problem:'"+m.get("PROBLEM")+"'}";
}
}
stat+="]";
}
if (list != null && list.size() > 0) {
str += "[";
for (int i = 0; i < list.size(); i++) {
Map m = (Map) list.get(i);
str += "{problemId:'" + m.get("PROBLEM_ID") + "',";
str += "answerId:'" + m.get("ANSWER_ID") + "',";
str += "answer:'" + m.get("ANSWER") + "',";
str += "answerSum:'" + m.get("ANSWER_SUM") + "',";
if (i + 1 < list.size()) {
str += "proportion:'" + m.get("PROPORTION")
+ "'},";
} else {
str += "proportion:'" + m.get("PROPORTION")
+ "'}";
}
}
str += "]";
}
this.setWriterPrint(stat+"&&"+str);
return null;
}
public String addVoteLog() {
try{
String ip=IpAddressUtils.getIp(this.getRequest());
// 验证此用户IP 是否已经投过票
if (voteService.existsUserIpInVoteLog(ip)) {// 此用户已经投过票
this.setWriterPrint("0");
return null;
} else {
// 添加抽奖日志和更新投票统计
String votestr=getParameter("votestr");
voteService.doVoteSubmit(ip, votestr);
voteService.statisticsVote();
return null;
}
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
* 获取客户端真实的IP
* @param request
* @return
*/
public String getIRealIPAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)
|| "null".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)
|| "null".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)
|| "null".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
public void setVoteService(IVoteService voteService) {
this.voteService = voteService;
}
}
第三步: JSP 以下: 图片和 js ,css 见附件
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ include file="/common/taglibs.jsp"%>
<%
String cityId = request.getParameter("cityId");
StringBuffer url=request.getRequestURL();
String str=url.toString();
String address=str.substring(str.indexOf("//")+2,str.indexOf("."));
request.setAttribute("city", address);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>户博士--买房专题</title>
<link href="${csspath}/vote/style/global.css" rel="stylesheet" type="text/css" />
<link href="${csspath}/vote/style/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="${csspath}/189rent/js/jquery.tools.min.js"></script>
<script type="text/javascript" src="${csspath}/script/ajax.js"></script>
</head>
<body class="main_bg">
<input type="hidden" id="city" name="city" value="${city }"/>
<div class="top_index">
<div class="main_w"><a href="#" title="看房团--8月18日隆重出发"><img src="${csspath}/vote/p_w_picpaths/dot.gif" width="163" height="181" /></a></div>
</div>
<div class="main_w">
<div class="main_left">
<div class="box_bg">
<div class="pad20">
<div class="txt_con">
<div class="tit"><h3>调控政策“态度暧昧”,9大城市房价上涨</h3>
</div>
<div class="text_content">
<p><img src="${csspath}/vote/p_w_picpaths/text_1.gif" width="220" height="150" />尽管调控政策并未出现放松,但一些不时传来的“微调”消息让全国多数城市居民依然预期房价将会上涨。近日,由首都经贸大学与中国社科院联合对30个省会城市以及大连、青岛等5个计划单列市,共计35个城市居民对房价预期进行调查,结果显示,32个城市居民皆预期房价将会继续上涨,这意味着有超九成居民预期当地房价将来会出现上涨。</p>
<p>从公布的调查结果来看,对将来房价上涨预期最高的城市为海口、其次分别为西宁、贵阳等。北京市民尽管也预期房价将会继续上涨,但在总排名中为28名,代表预期上涨幅度并不大。此外,杭州和青岛两个城市居民预期将来房价将会下跌,而济南市民则预期房价将不会上涨也不会下跌。</p>
<p>“在严厉的宏观调控、行政控制、政策打压的大环境中,×××价格仍然存在上涨预期,但并不存在大涨的预期。” 参与本次调查的首都经贸大学经济学院院长张连城介绍...<a href="#">【详细】</a></p>
</div>
</div>
<div class="txt_con">
<div class="tit"><h3>房价不跳水,在作俯卧撑?</h3>
</div>
<div class="text_content">
<p><img src="${csspath}/vote/p_w_picpaths/text_2.gif" width="220" height="150" />说到压力,第一个不得不说起上海。在这个将要崛起的东方金融中心,男人们的生活压力有目共睹。不管是上海本地人强烈的排外情绪,仍是日益高涨的购房压力,足以让男人们在这个全国最大的经济中心佝偻着的背更加弯曲。甚至对于爱情,他们更是不敢想象在经济地位不稳的状况下能娶到一个上海老婆。他们身上背负的压力一点不亚于当年附在孙悟空身上的五指山。</p>
<p>如今房价降低只是出现一点苗头,丈母娘如今连影子都不见了。何故?由于在2009年2010年买房的人资产已经大量缩水,丈母娘们当时被顾云昌、任志强们忽悠的一愣一愣,疯狂的逼迫女婿去买房子。如今,这两个家伙已经再也不吱声,可是,已经把一批人套进去了,这批人颇有可能成为第一批中国30年来出现负资产的群体。女婿一谈起房子便对丈母娘说:你看,我等于被大家高位截瘫了,变成残疾。原来250万的房子,如今只须要...<a href="#">【详细】</a></p>
</div>
</div>
<div class="txt_con">
<div class="tit"><h3>买房仍是租房,要走哪条路?</h3>
</div>
<div class="text_content">
<p><img src="${csspath}/vote/p_w_picpaths/text_3.gif" width="150" height="150" />说你见,或者不见,房子就在那里,不悲不喜;你念,或者不念,房子就在那里,不来不去……房子,买仍是不买?这的确是个问题。</p>
<p>市面上,堂而皇之的回答有“仁者见仁智者见智”,模棱两可的回答有“公说公有理婆说婆有理”。这些听起来好听,也都颇有文化,但细想下,仍是以为不知所云。要知道,买不买,别人想怎么说是别人的事,真正要掏真金白银作决定的,只是你本身。</p>
<p>听说,在德国,买一套房子至关容易,但有58%的民众会选择一生租房,年轻人租房比例更是高达77%。而在中国,买一套房子至关不容易,但几乎全部的民众都不会选择一生租房,年轻人亦然。是什么致使了这样的行为差异?</p>
<p>其实,买房和租房住起来都同样,不过从投资的角度看来,就大大的不一样了。中国人有钱了喜欢买房子,认为不动产是最稳定的投资,并且能福荫子孙。但现现在,地是国家的,不可能成为私产,因此你们就把购置不动产的热情投资到了房子上。然而...<a href="#">【详细】</a></p></div>
<div class="text_more"><a href="#">更多×××观点</a></div>
</div>
</div>
</div>
</div>
<div class="main_right">
<div class="box_bg">
<div class="pad10">
<div class="ser_title">
<div class="ico_ser"></div>
<div class="tit">近期楼市回暖影响你的买房计划吗?</div>
</div>
<div class="ser_block">
<div class="nvt_vote_2">
<div class="nvt_vote_wrap">
<form id="voteform" name="voteform" action="" method="get">
<input name="vgId" value="1866" type="hidden">
<div id="votediv" name="votediv" class="nvt_vote_cnt">
</div>
<div class="nvt_vote_cnt">
<div class="pad10">
<div id="tishi" name="tishi" class="nvt-bar-message">提示区</div>
<input value="" id="votesubmit" name="votesubmit" class="nvt_vote_submit" type="button">
<a href="#" class="nvt-bar-link" target="_blank">去团购>></a>
</div>
<div class="right cDGray">
<span class="nvt_vote_iclock">起止时间:2012-08-13 至 2012-09-12</span>
<div id="votediv1" name="votediv1"></div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script language="javascript">
$(document).ready(function(){
doVote();
});
function doVoteSubmit(){
var city=document.getElementById("city").value;
var uri = "http://"+city+".homescn.com/vote/addVoteLog.do";
var vote1=getRodioValue( "vote1");
var vote2=getRodioValue("vote2");
var vote3=getRodioValue("vote3");
if(vote1=="1" || vote2=="1" || vote3=="1"){
document.getElementById("tishi").innerHTML = " 选择答案后,才能投票 !";
return;
}
uri+="?votestr="+vote1+","+vote2+","+vote3;
document.getElementById("votesubmit").className =" nvt_vote_submit_over ";
document.getElementById("votesubmit").disabled= true ;
send_request(uri, function(data){
if("0"==data){
document.getElementById("tishi").innerHTML = "一个 IP 只能投一次票!";
}else{
doVote();
document.getElementById("tishi").innerHTML = "投票成功 !";
}
});
}
function getRodioValue(rodioName){
var a = document.getElementsByName( rodioName);
for(var i=0; i <a.length; i++)
{
if(a[i].checked){ return a[i].value;}
}
return "1";
}
function doVote(){
var city=document.getElementById("city").value;
var uri = "http://"+city+".homescn.com/vote/voteStatisticsList.do?";
var html="";
send_request(uri, function(data){
if(typeof(data) !='undefined' && data != ''){
var problemdata=data.substr(0,data.indexOf("&&"));
var answerdata=data.substr(data.indexOf("&&")+2);
var arr = eval(answerdata);
var prarr=eval(problemdata);
for(var j = 0; j < prarr.length; j++){
var obj1=prarr[j];
html+= "<dl class='nvt_vote_list'>";
html+="<dt><span class='ser_item'>"+obj1.problem+"</span></dt>";
for(var i = 0; i < arr.length; i++){
var obj=arr[i];
if(obj1.id==obj.problemId){
html+="<dd><label><input value='"+obj.problemId+"_"+obj.answerId+"' name='vote"+obj.problemId+"' type='radio'> "+obj.answer+"</label>";
html+='<div style="display: block;" class="nvt-bar"><div class="nvt-bar-trough"><span style="width: '+obj.proportion+'%;" id="nvt-bar-trough82208"></span></div><span class="nvt-bar-count" id="nvt-bar-count82208">'+obj.answerSum+'</span><span class="nvt-bar-rate" id="nvt-bar-rate82208">('+obj.proportion+'%)</span></div></dd><dd>';
}
}
}
html += "</dl>";
document.getElementById("votediv").innerHTML = html;
}else{
//document.getElementById("getnamelist").style.display = "none";
}
}, false);
}
</script>
</body>
</html>