📄 post.java
字号:
/* * 作者: 胡李青 * qq: 31703299 * Copyright (c) 2007 huliqing * 主页 http://www.tbuy.biz/ * 你可以免费使用该软件,未经许可请勿作用于任何商业目的,如有技术问题请与本人联系! */package biz.tbuy.bbs.bean;import biz.tbuy.bbs.FileModel;import biz.tbuy.bbs.BBSGroups;import biz.tbuy.bbs.TopicModel;import biz.tbuy.common.Constants;import biz.tbuy.bbs.TopicBuilder;import biz.tbuy.bbs.TopicFactory;import biz.tbuy.bbs.UserinfoBuilder;import biz.tbuy.bbs.UserinfoFactory;import biz.tbuy.bbs.UserinfoModel;import biz.tbuy.bbs.ZoneFactory;import biz.tbuy.common.UploadedFileOper;import biz.tbuy.common.Utils;import java.util.List;import javax.faces.component.UISelectOne;import javax.faces.model.SelectItem;import javax.faces.model.SelectItemGroup;import org.apache.myfaces.custom.fileupload.UploadedFile;/** * @author huliqing * <p><b>qq:</b>31703299 * <p><b>E-mail:</b><a href="mailto:huliqing.cn@gmail.com">huliqing.cn@gmail.com</a> * <p><b>Homepage:</b><a href="http://www.tbuy.biz/">http://www.tbuy.biz/</a> */public class Post extends BaseBean{ private String _title; // 所发表主题的:标题 private String _content; // 内容 private String _from; // 出处 private int _type; // 主题类型 private UISelectOne _uiType; // 绑定于主题类型 private int _byForum; // 所属讨论区的ID private boolean _beUpload; // 如果带有上传文件则设为true,否则为false private int _music = -1; // 选中的背景音乐的id private List<SelectItem> _topicTypes; // 所有可选的主题类型 private List<SelectItemGroup> _forums; // 所有可选的讨论区列表 //private List<SelectItem> _musics; // 所有可选的背景音乐 /** Creates a new instance of SendBean */ public Post() { // 检查用户是否已经登录 if (!getVisitor().isLogin()) { Utils.addErrorMessage(getBundle(), "你尚未登录系统,需要先登录系统后才可以发表文章 : )"); } // 实始化可选的音乐信息 //_musics = getBBSApplication().getBgsounds(); // 可选的主题类型 _topicTypes = getBBSApplication().getTopicTypesForItems(); // 初始化可选的讨论区列表 _forums = ZoneFactory.getForumsGroup(); } public void setTitle(String title) { _title = title; } public String getTitle() { return _title; } public void setContent(String content) { _content = content; } public String getContent() { return _content; } public void setFrom(String from) { _from = from; } public String getFrom() { return _from; } public void setType(int type) { _type = type; } public int getType() { return _type; } public void setUiType(UISelectOne uiType) { _uiType = uiType; } /** * 检查是否需要在post.jsp页面中显示“主题类型”选项, * 以供用户选择所要发布的主题类型,如:版规,公告,置顶等 * 默认只有身份为:admin,master的用户才显示 * @return true, 表示可以显示,false则不应该显示 */ public UISelectOne getUiType() { _uiType = new UISelectOne(); _uiType.setRendered(getVisitor().isAdmin() || getBBSApplication().isMaster(getVisitor().getUser().getId())); return _uiType; } public void setByForum(int byForum) { _byForum = byForum; } public int getByForum() { return _byForum; } public void setBeUpload(boolean beUpload) { _beUpload = beUpload; } public boolean getBeUpload() { return _beUpload; } public void setMusic(int music) { _music = music; } public int getMusic() { return _music; } /** * 获得全局是否允许上传图片 * @return true如果允许,false不允许 */ public boolean isUpload() { return getComApplication().isUpload(); } /** * 获得是否开启了主题背景音乐功能 * @return */ public boolean isBgsound() { return getBBSApplication().isBgsound(); } public List<SelectItem> getTopicTypes() { return _topicTypes; } public List<SelectItem> getMusics() { return getBBSApplication().getBgsounds(); } public List<SelectItemGroup> getForums() { return _forums; } /* 关于上传文件相关处理 ****************************************************/ private UploadedFileOper _fileOper; // 用于处理上传文件的自定义类 private UploadedFile _myFile; // 关于上传的文件 private String _myFileDes; // 上传文件的简短描述 private List<String> _suffixAllow; // 上传文件所允许的类型 private int _maxWidthAllow = 1024; // 上传文件允许的最大宽度(如果是图片) private int _maxHeightAllow = 768; // 上传文件允许的最大高度(如果是图片) private int _maxSizeAllow = 120; // 上传文件允许的最大Size(以K为单位) public void setMyFile(UploadedFile myFile) { _myFile = myFile; } public UploadedFile getMyFile() { return _myFile; } public void setMyFileDes(String myFileDes) { _myFileDes = myFileDes; } public String getMyFileDes() { return _myFileDes; } // typeAllow public void setSuffixAllow(List<String> suffixAllow) { _suffixAllow = suffixAllow; } public List<String> getSuffixAllow() { return _suffixAllow; } public void setMaxWidthAllow(int maxWidthAllow) { _maxWidthAllow = maxWidthAllow; } public int getMaxWidthAllow() { return _maxWidthAllow; } public void setMaxHeightAllow(int maxHeightAllow) { _maxHeightAllow = maxHeightAllow; } public int getMaxHeightAllow() { return _maxHeightAllow; } public void setMaxSizeAllow(int maxSizeAllow) { _maxSizeAllow = maxSizeAllow; } public int getMaxSizeAllow() { return _maxSizeAllow; } /** method **************************************************************** * 发表主题,该方法包括两部分, * 1.检查用户是否已经登录 * 2.判断用户是否有权限发表相应主题类型 * 3.发表主题. * 4.处理上传文件.如果处理不成功,则回收主题,因为关联的上传文件没有上传成功 * 5.后续处理更新.如:更新用户信息UserInfo,主题数、文章数等 * @return success 如果发表主题成功,否则返回failure */ public String sendTopic() throws Exception { // 1 先检查用户是否已经登录 if (!getVisitor().isLogin()) { Utils.addErrorMessage(getBundle(), "对不起,你需要先登录!"); return Constants.OUT_FAILURE; } TopicModel topic = makeTopic(); TopicBuilder tBuilder = TopicFactory.newBuilder(topic); int key = tBuilder.post(); // 如果key != -1, 即插入主题成功,key为该主题的主键值 if (key != -1) { // 如果主题发表成功则处理上传文件(如果允许上传),如果处理失败则回收主题 if (_myFile != null) { FileModel file = takeUploadedFile(key); if (file == null || !tBuilder.uploadFile(file)) { tBuilder.revoke(); Utils.addErrorMessage(getBundle(), "上传文件时遇到问题!"); return Constants.OUT_FAILURE; } } // 当一切完成之后就开始更新该作者信息. String userId = getVisitor().getUser().getId(); UserinfoModel userinfo = UserinfoFactory.getInstance().getUserinfo(userId); userinfo.setTotalTopic(userinfo.getTotalTopic() + 1); userinfo.setTotalArticle(userinfo.getTotalArticle() + 1); UserinfoBuilder uBuilder = UserinfoFactory.getInstance().newBuilder(userinfo); uBuilder.resetGroup(); uBuilder.update(); // 更新文章BBS文章信息 getBBSApplication().getArticleInfo().addArticleAndRecount(topic); Utils.addInfoMessage(getBundle(), "主题发表成功"); return Constants.OUT_SUCCESS; } return Constants.OUT_FAILURE; } /** * 组合topic */ private TopicModel makeTopic() { // 如果有上传文件,则使主题的beUpload字段为真,表示该主题带有上传文件 TopicModel topic = new TopicModel(); if (_myFile != null) { _beUpload = true;} if (_music != -1) { topic.setMusic(_music);} if (!_from.equals("")) { topic.setFrom(_from);} topic.setTitle(_title); topic.setContent(_content); topic.setByForum(_byForum); topic.setType(_type); topic.setBeLock(false); topic.setBeRevoke(false); topic.setBeUpload(_beUpload); topic.setByUser(getVisitor().getUser().getId()); topic.setIp(getVisitor().getIp()); return topic; } /** * 关于处理上传文件 * @param key, 相关主题的主键值,用于关联上传文件 */ private FileModel takeUploadedFile(int key) { if (_myFile == null) return null; _fileOper = new UploadedFileOper(_myFile); _fileOper.setMaxHeightAllow(_maxHeightAllow); _fileOper.setMaxWidthAllow(_maxWidthAllow); _fileOper.setMaxSizeAllow(_maxSizeAllow); _fileOper.setSuffixAllow(_suffixAllow); int allowKey = _fileOper.checkAllow(); switch (allowKey) { case 1: Utils.addErrorMessage(getBundle(), "对不起,你的上传文件太大!"); return null; case 2: Utils.addErrorMessage(getBundle(), "对不起,文件类型不被允许!"); return null; case 3: Utils.addErrorMessage(getBundle(), "对不起,文件宽度超过限制"); return null; case 4: Utils.addErrorMessage(getBundle(), "对不起,文件高度超过限制!"); return null; default: break; } // 保存文件 if (!_fileOper.saveTo(getSavePath() + _fileOper.getNewName())) { Utils.addErrorMessage(getBundle(), "对不起!保存文件时遇到问题!"); return null; } // 将文件信息插入数据库中 FileModel file = new FileModel(); file.setBeRevoke(false); file.setTarget("t"); file.setByTarget(key); file.setByUser(getVisitor().getUser().getId()); file.setDescription(_myFileDes); file.setName(_fileOper.getNewName()); file.setSize(Math.round(_fileOper.getSize() / 1024)); file.setType(_fileOper.getType()); file.setSuffix(_fileOper.getSuffix()); return file; } /** * 获取需要保存上传文件的文件夹路径 */ private String getSavePath() { return getComApplication().getServletContextPath() + BBSGroups.PATH_UPLOAD_FILE; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -