java怎么java实现分页功能信息提示功能

博客分类:
搜索的智能提示是一个搜索应用的标配,主要作用是避免用户输入错误的搜索词,并将用户引导到相应的关键词上,提升用户体验。
由于中文的特点,如果搜索自动提示可以支持拼音的话会给用户带来更大的方便,免得切换输入法。
目前大多数的电子商务网站都支持拼音提示功能。
基于用户的历史搜索关键字进行提示
同时支持汉字,拼音输入
支持前缀匹配,比如输入“ch”可能提示出“重庆”
支持缩写输入,比如输入“cq”能提示出“重庆”
多音字支持,比如输入“chongqing”或者“zhongqing”都能提示出“重庆”
输出结果,根据用户查询关键字的频率进行排序,暂时不考虑个性化需求
三、分析与解决方案
假设我们的搜索应用是基于solrcloud实现的,主要是对商家信息进行搜索,包括商家名称(store_name)、商家地址(address)。
(1). 用户每天输入大量的查询关键字,我们把查询的关键字记录下来,目前通过异步队列写入到mysql中,后期考虑写入到hbase中
(2). 用户输入的关键字可能是汉字、数字,英文,拼音,特殊字符等等,由于需要实现拼音提示,所以我们需要把汉字转换成拼音,java中考虑使用pinyin4j组件实现转换。
(3). 汉字转换拼音的过程中,顺便提取出拼音缩写,如“chongqing”,"zhongqing"---&"cq","zq"
(4). 要支持多音字提示,对查询串转换成拼音后,需要实现一个全排列组合,考虑到查询串可能比较长导致全排列比较的,具体算法需要做限制处理。
1. Solr Suggest实现智能提示
首先Solr作为一个应用广泛的搜索引擎系统,它内置了智能提示功能,叫做Suggest模块。该模块有两种可选方案做智能提示:
(1)、基于提示词文本做智能提示
(2)、基于索引中得某个字段建立索引词库做智能提示
配置如下:
schema.xml:
&field name="suggest" type="suggest_text" indexed="true" stored="false" multiValued="true" /&----------------------------------------------
&copyField source="store_name" dest="suggest" /&&copyField source="address" dest="suggest" /&
----------------------------------------------
&fieldType name="suggest_text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"&
&analyzer type="index"&
&tokenizer class="solr.KeywordTokenizerFactory" /&
&filter class="solr.SynonymFilterFactory"
synonyms="synonyms.txt"
ignoreCase="true"
expand="true" /&
&filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true" /&
&filter class="solr.LowerCaseFilterFactory" /&
&filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" /&
&/analyzer&
&analyzer type="query"&
&tokenizer class="solr.KeywordTokenizerFactory" /&
&filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true" /&
&filter class="solr.LowerCaseFilterFactory" /&
&filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" /&
&/analyzer&&/fieldType&
solrconfig.xml&searchComponent class="solr.SpellCheckComponent" name="suggest"&
&str name="queryAnalyzerFieldType"&suggest_text&/str&
&lst name="spellchecker"&
&str name="name"&suggest&/str&
&str name="classname"&org.apache.solr.spelling.suggest.Suggester&/str&
&str name="lookupImpl"&org.apache.solr.spelling.suggest.tst.TSTLookup&/str&
&str name="field"&suggest&/str&
&float name="threshold"&0&/float&
&str name="buildOnCommit"&true&/str&
&lst name="spellchecker"&
&str name="name"&default&/str&
&str name="field"&suggest&/str&
&str name="classname"&solr.DirectSolrSpellChecker&/str&
&str name="distanceMeasure"&internal&/str&
&float name="accuracy"&0.2&/float&
&int name="maxEdits"&2&/int&
&int name="minPrefix"&1&/int&
&int name="maxInspections"&50&/int&
&int name="minQueryLength"&2&/int&
&float name="maxQueryFrequency"&0.01&/float&
&lst name="spellchecker"&
&str name="name"&wordbreak&/str&
&str name="classname"&solr.WordBreakSolrSpellChecker&/str&
&str name="field"&suggest&/str&
&str name="combineWords"&true&/str&
&str name="breakWords"&true&/str&
&int name="maxChanges"&10&/int&
&/lst&&/searchComponent&
&requestHandler class="org.apache.ponent.SearchHandler" name="/suggest"&
&lst name="defaults"&
&str name="spellcheck"&true&/str&
&str name="spellcheck.dictionary"&default&/str&
&str name="spellcheck.dictionary"&wordbreak&/str&
&str name="spellcheck.dictionary"&suggest&/str&
&str name="spellcheck.onlyMorePopular"&true&/str&
&str name="spellcheck.count"&10&/str&
&str name="spellcheck.collate"&true&/str&
&arr name="components"&
&str&suggest&/str&
&/arr&&/requestHandler&
配置完成后,启动solrcloud:
java -Djetty.port=8983 -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DzkRun -DnumShards=1 -jar start.jar &
java -Djetty.port=7574 -DzkHost=localhost:9983
-Dcollection.configName=myconf -DnumShards=1 -jar start.jar &
第一次查询时,添加spellcheck.build=true参数来触发spellckecker建立索引,
http://localhost:8983/solr/collection1/suggest?q=cq&spellcheck.build=true&distrib=false
http://localhost:8983/solr/collection1/suggest?q=cq&distrib=false
该方法存在的问题是:
返回的结果是基于索引中字段的词频进行排序,不是用户搜索关键字的频率,因此不能将一些热门关键字排在前面(网上有人提到定制SuggestWordScoreComparator来实现)
拼音提示,多音字,缩写还是要另外加索引字段
2. Solrcloud建立单独的collection,利用solr前缀查询实现
配置如下:
&cores adminPath="/admin/cores" defaultCoreName="collection1" host="${host:}" hostPort="${jetty.port:8983}" hostContext="${hostContext:solr}" zkClientTimeout="${zkClientTimeout:15000}"&
&core name="collection1" instanceDir="collection1" /&
&core name="collection2" instanceDir="collection2" /&
cp -r collection1 collection2
修改collection2中的schema.xml和solrconfig.xml
schema.xml:
-----------------------fields--------------------------------
&field name="kw" type="string" indexed="true" stored="true" /&
&field name="pinyin" type="string" indexed="true" stored="false" multiValued="true"/&
&field name="abbre" type="string" indexed="true" stored="false" multiValued="true"/&
&field name="kwfreq" type="int" indexed="true" stored="true" /&
&field name="_version_" type="long" indexed="true" stored="true"/&
&field name="suggest" type="suggest_text" indexed="true" stored="false" multiValued="true" /&
------------------multiValued表示字段是多值的-------------------------------------
kw为原始关键字
pinyin和abbre的multiValued=true,在使用solrj建此索引时,定义成集合类型即可:如关键字“重庆”的pinyin字段为{chongqing,zhongqing}, abbre字段为{cq, zq}
kwfreq为用户搜索关键的频率,用于查询的时候排序
------------------uk----------------------------------
&uniqueKey&kw&/uniqueKey&
&defaultSearchField&suggest&/defaultSearchField&
-------------------------------------------------------
&copyField source="kw" dest="suggest" /&
&copyField source="pinyin" dest="suggest" /&
&copyField source="abbre" dest="suggest" /&
------------------suggest_text----------------------------------
&!-- suggest type--&
&fieldType name="suggest_text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"&
&analyzer type="index"&
&tokenizer class="solr.KeywordTokenizerFactory" /&
&filter class="solr.SynonymFilterFactory"
synonyms="synonyms.txt"
ignoreCase="true"
expand="true" /&
&filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true" /&
&filter class="solr.LowerCaseFilterFactory" /&
&filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" /&
&/analyzer&
&analyzer type="query"&
&tokenizer class="solr.KeywordTokenizerFactory" /&
&filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true" /&
&filter class="solr.LowerCaseFilterFactory" /&
&filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" /&
&/analyzer&
&/fieldType&
启动命令:
solr1:java -Xms1024m -Xmx1024m -Djetty.port=8983 -Dbootstrap_conf=true -DzkHost=localhost:9983 -DnumShards=1 -jar start.jar &solr2:java -Djetty.port=7574 -DzkHost=localhost:9983
-DnumShards=1 -jar start.jar &
solrj前缀查询语法:
private SolrQuery getSuggestQuery(String prefix, Integer limit) {
SolrQuery solrQuery = new SolrQuery();
StringBuilder sb = new StringBuilder();
sb.append("kw:").append(prefix).append("*");
sb.append(" or pinyin:").append(prefix).append("*");
sb.append(" or abbre:").append(prefix).append("*");
solrQuery.setQuery(sb.toString());
solrQuery.addField("kw");
solrQuery.addField("kwfreq");
solrQuery.addSort("kwfreq", SolrQuery.ORDER.desc);
solrQuery.setStart(0);
solrQuery.setRows(limit);
return solrQ
3. mongodb实现拼音智能提示
实现原理类似于方案2,利用mongodb强调的查询功能,数组和正则匹配。参考
经过测试,效果与方案2类似。
以上三个方案都能实现搜索关键字智能提示,方案1还需要研究完善才能实现基于用户搜索频率热词排序,方案3需要另外部署mongodb服务,不利用维护,所以本人在实际项目中采用了方案2.
浏览 10874
zhanshenny
浏览: 166602 次
来自: 北京
不需要solr、mongodb、任何数据库、jsp\php\a ...
其实还有其他方法,比如可以嵌入搜索引擎的搜索自动提示js,就可 ...
&div&&/div&
请问,这段代码哪里用到了Memcache,整个验证用cooki ...
alfresco简体中文汉化包:
http://www.inn ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'下次自动登录
现在的位置:
& 综合 & 正文
Java气泡提示功能实现
一个用Swing实现的java气泡提示效果。
运行效果如下图:
package org.loon.swing. import java.awt.BorderL
import java.awt.C
import java.awt.F
import java.awt.GraphicsE import java.awt.I import java.awt.R import javax.swing.BorderF import javax.swing.I import javax.swing.ImageI import javax.swing.JL import javax.swing.JP import javax.swing.JTextA import javax.swing.JW import javax.swing.border.EtchedB public class ToolTip {
// 气泡提示宽
private int _width = 300;
// 气泡提示高
private int _height = 100;
// 设定循环的步长
private int _step = 30;
// 每步时间
private int _stepTime = 30;
// 显示时间
private int _displayTime = 6000;
// 目前申请的气泡提示数量
private int _countOfToolTip = 0;
// 当前最大气泡数
private int _maxToolTip = 0;
// 在屏幕上显示的最大气泡提示数量
private int _maxToolTipS
private Font _
// 边框颜色
private Color _bgC
// 背景颜色
private Color _
// 消息颜色
private Color _messageC
// 差值设定
// 是否要求至顶(jre1.5以上版本方可执行)
boolean _useTop =
* 构造函数,初始化默认气泡提示设置
public ToolTip() {
// 设定字体
_font = new Font("宋体", 0, 12);
// 设定边框颜色
_bgColor = new Color(255, 255, 225);
_border = Color.BLACK;
_messageColor = Color.BLACK;
// 通过调用方法,强制获知是否支持自动窗体置顶
JWindow.class.getMethod("setAlwaysOnTop",
new Class[] { Boolean.class });
} catch (Exception e) {
* 重构JWindow用于显示单一气泡提示框
class ToolTipSingle extends JWindow {
private static final long serialVersionUID = 1L;
private JLabel _iconLabel = new JLabel();
private JTextArea _message = new JTextArea();
public ToolTipSingle() {
initComponents();
private void initComponents() {
setSize(_width, _height);
_message.setFont(getMessageFont());
JPanel externalPanel = new JPanel(new BorderLayout(1, 1));
externalPanel.setBackground(_bgColor);
// 通过设定水平与垂直差值获得内部面板
JPanel innerPanel = new JPanel(new BorderLayout(getGap(), getGap()));
innerPanel.setBackground(_bgColor);
_message.setBackground(_bgColor);
_message.setMargin(new Insets(4, 4, 4, 4));
_message.setLineWrap(true);
_message.setWrapStyleWord(true);
// 创建具有指定高亮和阴影颜色的阴刻浮雕化边框
EtchedBorder etchedBorder = (EtchedBorder) BorderFactory
.createEtchedBorder();
// 设定外部面板内容边框为风化效果
externalPanel.setBorder(etchedBorder);
// 加载内部面板
externalPanel.add(innerPanel);
_message.setForeground(getMessageColor());
innerPanel.add(_iconLabel, BorderLayout.WEST);
innerPanel.add(_message, BorderLayout.CENTER);
getContentPane().add(externalPanel);
* 动画开始
public void animate() {
new Animation(this).start();
* 此类处则动画处理
class Animation extends Thread {
ToolTipSingle _
public Animation(ToolTipSingle single) {
this._single =
* 调用动画效果,移动窗体坐标
* @param posx
* @param startY
* @param endY
* @throws InterruptedException
private void animateVertically(int posx, int startY, int endY)
throws InterruptedException {
_single.setLocation(posx, startY);
if (endY & startY) {
for (int i = startY; i & endY; i -= _step) {
_single.setLocation(posx, i);
Thread.sleep(_stepTime);
for (int i = startY; i & endY; i += _step) {
_single.setLocation(posx, i);
Thread.sleep(_stepTime);
_single.setLocation(posx, endY);
* 开始动画处理
public void run() {
boolean animate =
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
Rectangle screenRect = ge.getMaximumWindowBounds();
int screenHeight = (int) screenRect.
int startYP
int stopYP
if (screenRect.y & 0) {
_maxToolTipSceen = screenHeight / _
int posx = (int) screenRect.width - _width - 1;
_single.setLocation(posx, screenHeight);
_single.setVisible(true);
if (_useTop) {
_single.setAlwaysOnTop(true);
if (animate) {
startYPosition = screenH
stopYPosition = startYPosition - _height - 1;
if (_countOfToolTip & 0) {
stopYPosition = stopYPosition
- (_maxToolTip % _maxToolTipSceen * _height);
_maxToolTip = 0;
startYPosition = screenRect.y - _
stopYPosition = screenRect.y;
if (_countOfToolTip & 0) {
stopYPosition = stopYPosition
+ (_maxToolTip % _maxToolTipSceen * _height);
_maxToolTip = 0;
_countOfToolTip++;
_maxToolTip++;
animateVertically(posx, startYPosition, stopYPosition);
Thread.sleep(_displayTime);
animateVertically(posx, stopYPosition, startYPosition);
_countOfToolTip--;
_single.setVisible(false);
_single.dispose();
} catch (Exception e) {
throw new RuntimeException(e);
* 设定显示的图片及信息
* @param icon
* @param msg
public void setToolTip(Icon icon, String msg) {
ToolTipSingle single = new ToolTipSingle();
if (icon != null) {
single._iconLabel.setIcon(icon);
single._message.setText(msg);
single.animate();
* 设定显示的信息
* @param msg
public void setToolTip(String msg) {
setToolTip(null, msg);
* 获得当前消息字体
public Font getMessageFont() {
* 设置当前消息字体
* @param font
public void setMessageFont(Font font) {
* 获得边框颜色
public Color getBorderColor() {
* 设置边框颜色
* @param _bgColor
public void setBorderColor(Color borderColor) {
this._border = borderC
* 获得显示时间
public int getDisplayTime() {
return _displayT
* 设置显示时间
* @param displayTime
public void setDisplayTime(int displayTime) {
this._displayTime = displayT
* 获得差值
public int getGap() {
* 设定差值
* @param gap
public void setGap(int gap) {
this._gap =
* 获得信息颜色
public Color getMessageColor() {
return _messageC
* 设定信息颜色
* @param messageColor
public void setMessageColor(Color messageColor) {
this._messageColor = messageC
* 获得循环步长
public int getStep() {
* 设定循环步长
* @param _step
public void setStep(int _step) {
this._step = _
public int getStepTime() {
return _stepT
public void setStepTime(int _stepTime) {
this._stepTime = _stepT
public Color getBackgroundColor() {
return _bgC
public void setBackgroundColor(Color bgColor) {
this._bgColor = bgC
public int getHeight() {
public void setHeight(int height) {
this._height =
public int getWidth() {
public void setWidth(int width) {
this._width =
public static void main(String[] args) {
ToolTip tip = new ToolTip();
tip.setToolTip(new ImageIcon("test.jpg"),"“程序员”就是特指越写程序身材越“圆”那群人 -- cping1982");
&&&&推荐文章:
【上篇】【下篇】JAVA中实现消息提示功能代码 - CSDN博客
JAVA中实现消息提示功能代码
注(在MyEclipse中新建一个jsp文件然后把代码复制到当中即可!)
&%@ page language="java" import="java.util.*" pageEncoding="utf-8"%&&%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%&
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&&html&& &head&&&& &base href="&%=basePath%&"&&&& &&&&&&& &title&MSN 弹出消息框&/title&&script language="javascript" type="text/javascript"&function MessShow(id,width,height,caption,title,message,target,action) { &&& this.id&&&&&&&& = &&& this.title&&&&& = &&& this.caption&&& = &&& this.message&&& = &&& this.target&&&& = &&& this.action&&&& = &&& this.width&&&&& = width?width:250; &&& this.height&&&& = height?height:150; &&& this.timeout&&& = 250;&&&&& //消息停留时间&&& this.speed&&&&& = 10;&&&&&& //消息速度,越小越快&&& this.step&&&&&& = 2;&&&&&&& //移动步长&&& this.right&&&&& = screen.width -1; &&& this.bottom&&&& = screen.&&& this.left&&&&&& = this.right - this.&&& this.top&&&&&&& = this.bottom - this.&&& this.timer&&&&& = 0;&&& this.pause&&&&& =&&& this.close&&&&& =&&& this.autoHide&& =}
MessShow.prototype.hide = function() { &&& if(this.onunload())&&& { &&&&&&& var offset = this.height&this.bottom-this.top?this.height:this.bottom-this.&&&&&&& var me = &&&&&&& if(this.timer&0)&&&&&&& { &&&&&&&&&&& window.clearInterval(me.timer); &&&&&&& } &&&&&&& var fun = function()&&&&&&& { &&&&&&&&&&& if(me.pause==false||me.close)&&&&&&&&&&& {&&&&&&&&&&&&&&& var x = me.&&&&&&&&&&&&&&& var y = 0;&&&&&&&&&&&&&&& var width = me.&&&&&&&&&&&&&&& var height = 0;&&&&&&&&&&&&&&& if(me.offset&0){&&&&&&&&&&&&&&&&&&& height = me.&&&&&&&&&&&&&&& }&&& &&&&&&&&&&&&&&& y = me.bottom -&&& &&&&&&&&&&&&&&& if(y&=me.bottom){&&&&&&&&&&&&&&&&&&& window.clearInterval(me.timer); &&&&&&&&&&&&&&&&&&& me.Pop.hide(); &&&&&&&&&&&&&&& } else {&&&&&&&&&&&&&&&&&&& me.offset = me.offset - me. &&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& me.Pop.show(x,y,width,height);&& &&&&&&&&&&& }&&&&&&&&&&& &&&&&&& } &&&&&&& this.timer = window.setInterval(fun,this.speed)&&&& &&& } } //消息卸载事件,可以重写
MessShow.prototype.onunload = function() { &&& } // 消息命令事件,要实现自己的连接,请重写它 MessShow.prototype.oncommand = function() { &&& window.open(this.action,this.target);&&& this.hide(); } // 消息显示方法 MessShow.prototype.show = function() { &&& var oPopup = window.createPopup(); //IE5.5+&&&& &&& this.Pop = oP&& &&& var w = this. &&& var h = this. &&& var str = "&DIV style='BORDER-RIGHT:#005FEE 1 BORDER-TOP:#005FEE 1 Z-INDEX: 99999; LEFT: 0 BORDER-LEFT:#005FEE 1 WIDTH: " + w + " BORDER-BOTTOM:#005FEE 1 POSITION: TOP: 0 HEIGHT: " + h + " BACKGROUND-COLOR:#FFFFFF'&" &&&&&&& str += "&TABLE style='BORDER-TOP: #FFFFFF 1 BORDER-LEFT: #FFFFFF 1px solid' cellSpacing=0 cellPadding=0 width='100%' bgColor=#FFFFFF border=0&" &&&&&&& str += "&TR&" &&&&&&& str += "&TD style='FONT-SIZE: 12COLOR: #0052CC' width=30 height=24&∵&/TD&" &&&&&&& str += "&TD style='PADDING-LEFT: 4 FONT-WEIGHT: FONT-SIZE: 12 COLOR:#0052CC; PADDING-TOP: 4px' valign=middle width='100%'&" + this.caption + "&/TD&" &&&&&&& str += "&TD style='PADDING-RIGHT: 2 PADDING-TOP: 2px' valign=middle align=right width=19&" &&&&&&& str += "&SPAN title=关闭 style='FONT-WEIGHT: FONT-SIZE: 12 CURSOR: COLOR: MARGIN-RIGHT: 4px' id='btSysClose' &&&/SPAN&&/TD&" &&&&&&& str += "&/TR&" &&&&&&& str += "&TR&" &&&&&&& str += "&TD style='PADDING-RIGHT: 1PADDING-BOTTOM: 1px' colSpan=3 height=" + (h-28) + "&" &&&&&&& str += "&DIV style='BORDER-RIGHT: FFFFFF 1 PADDING-RIGHT: 8 BORDER-TOP:#66A3FF 1 PADDING-LEFT: 8 FONT-SIZE: 12 PADDING-BOTTOM: 8 BORDER-LEFT:#FFFFFF 1 WIDTH: 100%; COLOR:#FFFFFF; PADDING-TOP: 8 BORDER-BOTTOM:#FFFFFF 1 HEIGHT: 100%'&&FONT color=#EE0000&" + this.title + "&/FONT&&BR&&BR&" &&&&&&& str += "&DIV style='WORD-BREAK: break-all' align=left&&A href='javascript:void(0)' hidefocus=true id='btCommand'&&FONT color=#EE0000&" + this.message + "&/FONT&&/A&&/DIV&" &&&&&&& str += "&/DIV&" &&&&&&& str += "&/TD&" &&&&&&& str += "&/TR&" &&&&&&& str += "&/TABLE&" &&&&&&& str += "&/DIV&"
&&& oPopup.document.body.innerHTML = &&& this.offset = 0;&&& var me = &&& oPopup.document.body.onmouseover = function(){me.pause=}&&& oPopup.document.body.onmouseout = function(){me.pause=}&&& var fun = function()&&& { &&&&&&& var x = me.&&&&&&& var y = 0;&&&&&&& var width&&& = me.&&&&&&& var height&&& = me.
&&&&&&&&&&& if(me.offset&me.height)&&&&&&&&&&& {&&&&&&&&&&&&&&& height = me.&&&&&&&&&&& } else&&&&&&&&&&& {&&&&&&&&&&&&&&& height = me.&&&&&&&&&&& }&&&&&&& y = me.bottom - me.&&&&&&& if(y&=me.top)&&&&&&& {&&&&&&&&&&& me.timeout--;&&&&&&&&&&& if(me.timeout==0)&&&&&&&&&&& {&&&&&&&&&&&&&&& window.clearInterval(me.timer); &&&&&&&&&&&&&&& if(me.autoHide)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& me.hide();&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }&&&&&&& else&&&&&&& {&&&&&&&&&&& me.offset = me.offset + me.&&&&&&& }&&&&&&& me.Pop.show(x,y,width,height); &&& }&& &&& this.timer = window.setInterval(fun,this.speed) &&& var btClose = oPopup.document.getElementById("btSysClose"); &&& btClose.onclick = function()&&& { &&&&&&& me.close =&&&&&&& me.hide(); &&& } &&& var btCommand = oPopup.document.getElementById("btCommand"); &&& btCommand.onclick = function()&&& { &&&&&&& me.oncommand(); &&& } } // 设置速度方法MessShow.prototype.speed = function(s){&&& var t = 10;&&& try&&& {&&&&&&& t = praseInt(s);&&& }&&& catch(e){}
&&& this.speed =}// 设置步长方法MessShow.prototype.step = function(s){&&& var t = 2;&&& try&&& {&&&&&&& t = praseInt(s);&&& }&&& catch(e){} &&& this.step =} MessShow.prototype.rect = function(left,right,top,bottom){&&& try&&& {&&&&&&& this.left&&& = left?left:0;&&&&&&& this.right&&& = right?right:screen.availWidth -1;&&&&&&& this.top&&& = top?top:0;&&&&&&& this.bottom = bottom?bottom:screen.availH&&& }&&& catch(e)&&& {}}
&&&&& function load()&&&&& {&&&&&&&& &&&&&&&& var msg = new MessShow("hello",250,150,"信息","小马,你好!","QQ:******* 请求加为好友!","_bank",''); &&&&&&&& msg.show(); &&&&& }&&& &/script&&/head&&body onLoad="load()"&&&& &form id="form1" runat="server"&&&& &div&&&&& &&& &/div&&&& &/form&&/body&
本文已收录于以下专栏:
相关文章推荐
最近在做一个私信的功能
一张message表:存储消息内容和创建者id;一张user_message表:存储发送者、接收者及消息id
本以为考虑还算周全,今天又查看了一些文章,发现还是差的...
http://www.oschina.net/question/12_70252
私信功能,实现像对方发送私信消息后,在我的私信列表页面显示与发送或者接受消息的人列表,列表每条记录只显示与该对话的最新的一条消息。 点击列表中的任意一条,进入到消息对话详情页面,按照倒序显示该对话的详...
java实现即时消息提醒方法 源代码下载地址:/share/6736.htm
最近主要学习Swing的知识,经常用到消息提示框,经常忘记他们的用法,现在写个博客供自己和大家参考,主要分为以下三种形式:
首先顺带介绍下改变swing控件的风格为当前系统(windwos 10)风格...
注(在MyEclipse中新建一个jsp文件然后把代码复制到当中即可!)
String path = request.getContextPath();
String basePat...
java实现用户分页消息功能package com.kero99.ygc.import java.util.L
//分页pojo 持久化类
public class PageData...
/art/242.htm
http://blog.chinaunix.net/u/21684/showart_462486.h...
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 java实现邮件发送功能 的文章

 

随机推荐