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>