为jive论坛加上投票功能

SpringBoot和Vue法律咨询案件进度与智能文书管理系统源码 包含前后端源码、SQL初始化脚本和启动说明。JDK 17、Spring Boot、Vue;默认H2演示数据库。 立即下载
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 为jive论坛加上投票功能 jive是什么就不多说了,我用过好些论坛的投票,比较喜欢动网论坛的投票。 操作很简单,选择单选还是多选,然后输入投票选项,每一行做一个选项,最多10个。 我把这个功能加进jive里面,建立两个新表: CREATE TABLE jivevote ( voteid int not null,--投票id,跟jive的theadid保持一致 type int NOT NULL,--投票类型,单选还是多选 votenum int NOT NULL,--数目 votetxt text NOT NULL,--投票的文本内容 content1 int default 0, content2 int default 0, content3 int default 0, content4 int default 0, content5 int default 0, content6 int default 0, content7 int default 0, content8 int default 0, content9 int default 0, content10 int default 0, PRIMARY KEY (voteid) ); CREATE TABLE jivevoterecord ( voteid int not null,--投票id,跟jive的theadid保持一致 userid int not null--记录投过票的用户 ); 写一个Poll.java文件,为求方便都写为静态方法, package com.jivesoftware.forum.database;//这样可以调用连接池 增加主题投票,用户提交投票内容,是否单选 public static void addVoteThread(long voteid,String votetxt,boolean single,int votenum){ String sqlstr = "insert into jivevote (voteid,type,votetxt,votenum) values(?,?,?,?)"; Connection con = null; PreparedStatement stmt = null; try { con = ConnectionManager.getConnection(); stmt = con.prepareStatement(sqlstr); stmt.setLong(1,voteid); stmt.setInt(2,single?0:1); stmt.setString(3,votetxt); stmt.setInt(4,votenum); stmt.executeUpdate(); } catch(SQLException sqle) { sqle.printStackTrace(); } finally { try { stmt.close(); } catch(Exception e) { e.printStackTrace(); } try { con.close(); } catch(Exception e) { e.printStackTrace(); } } } 执行投票操作,threadID为新建立投票的时候建立的主题id,voted数组为选项 public static boolean vote(long threadID,int[] voted,long userID){ if(isVoted(threadID,userID)){ return false; } Connection con = null; PreparedStatement stmt = null; try { con = ConnectionManager.getConnection(); for(int i=0;i<voted.length;i ){ if(voted[i]!=0){ stmt = con.prepareStatement("update jivevote set content" voted[i] "= content" voted[i] " 1 where voteid=?"); stmt.setLong(1,threadID); stmt.executeUpdate(); } } stmt = con.prepareStatement("insert into jivevoterecord(voteid,userid) values(?,?)"); stmt.setLong(1,threadID); stmt.setLong(2,userID); stmt.executeUpdate(); } catch(SQLException sqle) { sqle.printStackTrace(); } finally { try { stmt.close(); } catch(Exception e) { e.printStackTrace(); } try { con.close(); } catch(Exception e) { e.printStackTrace(); } } return true; } 判断是否已经投过票 public static boolean isVoted(long threadID,long userID){ Connection con = null; PreparedStatement stmt = null; boolean ret = false; try { con = ConnectionManager.getConnection(); stmt = con.prepareStatement("select voteid from jivevoterecord where voteid=? and userid=?"); stmt.setLong(1,threadID); stmt.setLong(2,userID); ResultSet rs = stmt.executeQuery(); ret = rs.next(); } catch(SQLException sqle) { sqle.printStackTrace(); } finally { try { stmt.close(); } catch(Exception e) { e.printStackTrace(); } try { con.close(); } catch(Exception e) { e.printStackTrace(); } } return ret; } 取得投票内容 public static String getVoteView(long threadID,long userID){ Connection con = null; PreparedStatement stmt = null; StringBuffer sb = new StringBuffer(); sb.append("<table cellpadding="5" cellspacing="0" border="0" width="100%" align="center">"); boolean isVotedUser = false; try { con = ConnectionManager.getConnection(); stmt = con.prepareStatement("select * from jivevote where voteid=?"); stmt.setLong(1,threadID); ResultSet rs = stmt.executeQuery(); String s=""; if(rs.next()){ int type = rs.getInt("type"); int votenum = rs.getInt("votenum"); sb.append("<input type=hidden name=type value="" type "">"); sb.append("<input type=hidden name=votenum value="" votenum "">"); String votetxt = rs.getString("votetxt"); String[] opts = votetxt.split(" "); for(int i=1;i<=opts.length;i ){ sb.append("<tr>"); if(i==1){ s = " checked"; }else{ s=""; } if(type==1){ sb.append("<td>" i ".<input type=checkbox name=chk_" i " value=" i ">" opts[i-1] "</td><td>票数:<font color=red><b>" rs.getInt("content" i) "</b></font></td>"); }else{ sb.append("<td>" i ".<input type=radio name=chk value=" i s ">" opts[i-1] "</td><td>票数:<font color=red><b>" rs.getInt("content" i) "</b></font></td>"); } sb.append("</tr>"); } } isVotedUser = isVoted(threadID,userID); if(!isVotedUser){ sb.append("<tr><td><input type=submit name=submit value= 投票 ></td><td></td><td></td></tr>"); }else{ sb.append("<tr><td><font color=red>你已经投过票了</font></td><td></td><td></td></tr>"); } } catch(SQLException sqle) { sqle.printStackTrace(); } finally { try { stmt.close(); } catch(Exception e) { e.printStackTrace(); } try { con.close(); } catch(Exception e) { e.printStackTrace(); } } sb.append("</table>"); return sb.toString(); } 增加一个新的jsp: <% /** * $RCSfile: addVote.jsp,v $ * $Revision: 1.13.4.2 $ * $Date: 2002/05/21 20:38:12 $ */ %> <%@ page import="java.net.*, java.text.*, java.util.*, com.jivesoftware.util.*, com.jivesoftware.forum.*, com.jivesoftware.forum.util.*" errorPage="error.jsp" %> <%@ include file="postUtils.jsp" %> <%@ include file="global.jsp" %> <%@page contentType="text/html;charset=GBK"%> <% // Put the request URI and query string in the session as an attribute. // This is done so the error.jsp and auth.jsp pages can figure out what // page sent it an error and redirect appropriately. setRedirectURL(request); %> <% if(pageUser==null){ throw new UnauthorizedException("你没有权限操作."); } long forumID = ParamUtils.getLongParameter(request,"forum",-1L); long threadID = ParamUtils.getLongParameter(request,"thread",-1L); int type = ParamUtils.getIntParameter(request,"type",0); int votenum = ParamUtils.getIntParameter(request,"votenum",0); String opt = ParamUtils.getParameter(request,"chk"); forumFactory=com.jivesoftware.forum.database.DbForumFactory.getInstance(); // Load the forum Forum forum = forumFactory.getForum(forumID); ForumThread thread = forum.getThread(threadID); int opti=1; try{ opti = Integer.parseInt(opt); }catch(Exception e){ } if(type==0){ int[] opts = new int[1]; opts[0] = opti; Helper.vote(threadID,opts,pageUser.getID()); }else{ if(votenum>0){ int[] opts = new int[votenum]; int i=0; Enumeration e = request.getParameterNames(); while ( e.hasMoreElements() ){ String vid=(String)e.nextElement(); if ( vid.startsWith("chk_") ){ opts[i] = Integer.parseInt(request.getParameter(vid)); i ; } } Helper.vote(threadID,opts,pageUser.getID()); } } response.sendRedirect("thread.jsp?forum=" forumID "&thread=" threadID); %> 在post.jsp里面加入投票 ... String votetxt = ParamUtils.getParameter(request,"votetxt"); int votetype = ParamUtils.getIntParameter(request,"votetype",0); ... if (doPost && subjectOK && bodyOK) { if(fromPreview){ newMessage = postMessage(request, reply, forumFactory, forum, thread, messageID, pageUser, name, email, subject, body); }else{ newMessage = postMessage(request, reply, forumFactory, forum, thread, messageID, pageUser, name, email, subject, body); } thread = newMessage.getForumThread(); //增加投票 if(vote && votetxt!=null && !reply){ int votenum = 0; String[] voteoptions = votetxt.split(" "); if(voteoptions.length>=10){ votenum=10; }else{ votenum = voteoptions.length; } votetxt=""; for (int i = 0; i < votenum;i ) { votetxt = votetxt voteoptions[i] " "; } Poll.addVoteThread(thread.getID(),votetxt,votetype==0,votenum); thread.setProperty("vote","true");//设置为投票帖子 }
汽车电子基于OTA的Bootloader更新机制:量产车软件升级断点版本限制与跨代更新规避策略 内容概要:本文深入剖析了量产汽车ECU中Bootloader在OTA升级过程中为何无法跨“断点版本”升级的核心原理。文章从Bootloader作为可信根的不可变性出发,解释了其在SOP后禁止常规OTA更新的原因,并揭示了Flash分区机制下OTA仅能擦写Application区的限制。通过介绍“两段式搬运”自更新机制,阐明了新版Bootloader需依赖旧版Bootloader执行迁移的“鸡生蛋”困境,进而引出断点版本的概念——即首次引入新Bootloader特性的关键过渡版本。文中详细列举了导致断点的典型变更(如签名算法、分区表等),并指出跨版本升级失败的根本原因在于旧Bootloader无法解析新镜像格式或执行更新流程。最后提出系统性解决方案,包括构建有向升级路径图、终端前置校验、A/B冗余、Golden恢复区等工程防护措施,强调需从架构、发布、OTA后台到售后体系全流程协同管理断点风险。; 适合人群:汽车电子工程师、车载软件开发人员、OTA系统设计师及从事ECU固件升级相关的技术管理人员,尤其适合具备嵌入式系统和UDS诊断基础的研发人员。; 使用场景及目标:①理解Bootloader在OTA中的核心作用及其不可随意更新的设计逻辑;②掌握断点版本的成因与应对策略,避免实际升级中出现“变砖”事故;③指导OTA系统设计与升级路径规划,提升整车软件迭代的安全性与可靠性。; 阅读建议:此资源结合真实工程场景深入浅出地讲解复杂机制,建议结合Bootloader自更新流程图与实际UDS刷写案例对照学习,重点关注版本兼容性判断、安全校验设计及故障恢复机制,在开发和测试中充分模拟跨断点升级场景以验证系统鲁棒性。 立即下载

相关推荐

电力电子基于CCM Boost拓扑的3.3kW PFC电路参数设计:功率因数校正系统电感与器件选型优化

摘要:工程计算最难的不是算出来,而是「算完讲得清、改得动」。本文以一份 《3.3kW CCM BOOST PFC circuit parameters calculation》计算书为例,梳理 Maple Flow 的核心功能,并看它如何把规格、公式、器件选型、损耗校验和环路设计收进同一份可交付文档。

ParamUtils参数接受工具类的代码及介绍

ParamUtils这个类,觉得以后做项目时可以把做成一个单独的组件使用,解决了request.getParameter()时只能取出String的问题。 /** * $RCSfile: ParamUtils.java,v $ * $Revision: 1.6 $ * $Date: 2001/07/31 05:38:18 $ * * Copyright (C) 1...

Java 初学者 1359

政府科技管理者在推动科技成果转化过程中,如何精准识别具有高转化潜力的科技成果?.docx

政府科技管理者在推动科技成果转化过程中,如何精准识别具有高转化潜力的科技成果?

分页查询优化

****************************ARCH4架构分页查询优化****************************优化原理:查询时传入页号、每页记录数,查询第1页时获取总记录数及第1页数据,查询其他页时只获取该页数据(设置总记录数为-1)。优化效果:只在查询第1页时查询符合条件的总记录数,下一页时不查询,减少了数据库执行的count方法。代码修改:需要在客户端缓

我的Java之路,关注Java技术的发展 2540

政府科技管理者如何精准识别本区域高校科研成果的技术转化潜力?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何利用数智工具提升技术引进与消化吸收能力?.docx

国央企创新负责人如何利用数智工具提升技术引进与消化吸收能力?

验证码源代码

逍遥 202

产业园区运营负责人如何精准对接企业技术需求与科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

双向全桥CLLC谐振变换器仿真模型(Simulink仿真实现)

内容概要:本文系统介绍了双向全桥CLLC谐振变换器的Simulink仿真模型,重点阐述了变频控制、闭环仿真及其与多种电力电子拓扑(如维也纳整流器、DAB变换器、图腾柱PFC等)的联合仿真设计。资源包涵盖2.5kW双向全桥LLC、V2G电动汽车充放电系统、三相PFC、多相交错LLC等多种变换器的仿真案例,并深入展示了三电平VIENNA整流器在双闭环PI控制与SVPWM调制策略下,结合上下电容电压差值补偿实现中点电位平衡的先进控制方法。通过仿真验证,该策略不仅有效维持了800V直流母线电压的稳定,还在动态工况下显著提升了电容电压的均衡度,同时保持了较低的输入电流THD,充分体现了SVPWM与中点平衡控制协同优化的技术优势。; 适合人群:具备电力电子与自动控制理论基础,从事新能源发电、电动汽车、工业电源、微电网等领域的研究生、工程师及科研人员。; 使用场景及目标:① 学习并构建高频谐振变换器(如LLC、CLLC)的Simulink仿真模型,掌握其变频与混合控制策略;② 深入理解并应用中点电位平衡、双闭环PI控制、SVPWM调制等核心技术于VIENNA等三电平变换器中;③ 复现高水平期刊论文中的控制算法,服务于科研项目申报、学术论文撰写或工程产品开发。; 阅读建议:该资源为综合性仿真资料库,建议使用者结合自身研究方向(如电动汽车充电、新能源并网)选择对应案例进行精学,重点关注控制策略的设计逻辑、仿真参数的整定方法以及SVPWM与中点平衡的协同机制,并充分利用附带的计算书和参考文献深化理解,以实现从仿真模型到实际工程应用的顺利转化。

邻传 NearShare v1.3.0|Windows局域网扫码文件互传、Word/Excel预览与直接打印(含MIT源码)

邻传是一款运行在 Windows 10/11 x64 电脑上的局域网文件共享工具。手机与电脑连接同一 Wi-Fi,扫码后使用浏览器双向上传、下载文件,无需蓝牙、手机 App 或配对码。 功能:同名文件以最后成功上传版本为准并保留历史;Word DOC/DOCX、Excel XLS/XLSX/XLSB/XLSM、ODS/CSV 在线预览;电脑端点击直接调出打印界面;类型筛选、搜索、列表/网格、批量删除和清空;自动识别电脑名称及可获取的手机型号,自动更新 IP 与二维码。 包内包含安装版、免安装版、MIT 协议源码、使用说明和 SHA-256 校验值,内置 Node.js,无需安装开发环境,不含个人共享数据。 使用:电脑启动 → 手机同一 Wi-Fi 扫码 → 上传/预览/下载。适合家庭、可信办公网络分享照片与文档。 限制:无登录、HTTP,能访问服务地址的设备可读写删除,请勿映射公网。Office 复杂排版可能简化;预览上限20MB,表格预览1000行50列;打印上限20MB/10万格/100页PDF,仅电脑支持。为手动分享工具,非自动文件夹同步。安装包暂未数字签名。

产业园区如何高效匹配企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

全桥LLC谐振软开关Simulink仿真设计

内容概要:本文系统介绍了全桥LLC谐振软开关在Simulink环境下的仿真设计,涵盖单相、三相、双向全桥、半桥及多相交错并联等多种LLC谐振变换器拓扑结构,重点研究软开关技术、变频控制、移相混合控制、闭环仿真建模与关键参数设计。详细展示了全桥LLC谐振变换器的闭环仿真模型构建流程,包括开环与闭环控制策略、软启动机制、恒压恒流双闭环控制体系,并结合Mathcad进行精确的参数计算。此外,文档还整合了丰富的电力电子系统仿真案例,如PFC变换器、PWM整流器、CLLC变换器等,充分体现了该资源在电力电子变换器仿真设计中的全面性与实用价值; 适合人群:具备电力电子、自动化或电气工程等相关专业背景,熟悉Simulink/Matlab仿真工具,从事电源变换器设计、新能源系统开发或电力系统仿真的研究生、科研人员及工程技术人员; 使用场景及目标:①用于深入学习和掌握LLC谐振变换器的工作原理与系统级仿真建模方法;②支撑软开关技术、闭环控制策略、谐振参数优化等方面的科研攻关与工程项目开发;③作为高校电力电子课程教学、实验设计或毕业设计的重要参考资料,全面提升仿真实践能力与工程设计素养; 其他说明:该资源不仅提供完整的Simulink/Plecs仿真模型,还配套提供详细的设计报告、参数计算书、说明PPT及参考文献,有助于用户深入理解设计逻辑与实现细节,建议结合公众号“荔枝科研社”获取全套资料与持续的技术支持。

信息收集-服务器信息

服务器上面可以运行大量的系统服务和第三方应用服务,如果操作系统或者第三方软件没有及时升级打补丁,攻击者就有可能直接通过服务器上运行的服务进行攻击。

weixin_49349476的博客 1446
上一篇: J2EE设计模式浅谈(二)之Filter
下一篇: Java 线程/内存模型的缺陷和增强
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值