練功房推薦書單

  • Google!Android 3手機應用程式設計入門(第四版)
  • 賈伯斯傳(軟皮精裝版)
  • 猛虎出閘制霸版:最新OCP Java SE 6 Programmer專業認證(附原始程式碼及範例檔)
  • SCWCD 5 猛虎出閘:Java Web 應用程式專業認證
Messages posted by: andowson
Forum Index » Profile for andowson » Messages posted by andowson
Message
十鼎 wrote:问题:删除一个主题时,用户的文章数并没有减去相应数量。

請修改一下src/main/java/net/jforum/dao/generic/GenericPostDAO.java#removePosts(),加上
userDAO.decrementPosts(post.getUserId());
...
import net.jforum.dao.UserDAO;
...

        private void removePosts(List<Post> posts)
        {
                PreparedStatement pstmtPost = null;
                PreparedStatement pstmtText = null;
                UserDAO userDAO = DataAccessDriver.getInstance().newUserDAO();

                try {
                        pstmtPost = JForumExecutionContext.getConnection()
                                        .prepareStatement(SystemGlobals.getSql("PostModel.deletePost"));

                        pstmtText = JForumExecutionContext.getConnection().prepareStatement(
                                        SystemGlobals.getSql("PostModel.deletePostText"));

                        for (Iterator<Post> iter = posts.iterator(); iter.hasNext();) {
                                Post post = iter.next();

                                pstmtPost.setInt(1, post.getId());
                                pstmtText.setInt(1, post.getId());

                                pstmtText.executeUpdate();
                                pstmtPost.executeUpdate();
                                
                                SearchFacade.delete(post);
                                userDAO.decrementPosts(post.getUserId());
                        }
                }
                catch (SQLException e) {
                        throw new DatabaseException(e);
                }
                finally {
                        DbUtils.close(pstmtPost);
                        DbUtils.close(pstmtText);
                }
        }


然後修改src/main/java/net/jforum/view/forum/PostAction.java#delete()
      public void delete()
      {
                        ....
			postDao.delete(post);
			//刪掉這行DataAccessDriver.getInstance().newUserDAO().decrementPosts(post.getUserId());
                        ...
      }

感謝分享,這個站的功能確實不錯。
Tomcat Connector Auto Upgrader
tomcat-connector-upgrade.sh:
#!/bin/bash
# Name: Tomcat Connector 1.2.x auto-upgrade installer
# Author: Andowson Chang (andowson [at] gmail [dot] com)
# Version: 0.2
# Since: 2007-03-17
# Last Modified: 2011-07-16
#
# check the latest stable version of Tomcat Connector 1.2
#
TOMCAT_CONNECTOR_VERSION=1.2.32
MIRROR_HOST=apache.ntu.edu.tw

yum -y install httpd-devel apr-devel libtool automake make gcc gcc-c++

wget http://tomcat.apache.org/download-connectors.cgi -q -t 1 -T 5 -O /tmp/connector.html
if [ -s /tmp/connector.html ]; then
   TOMCAT_CONNECTOR_VERSION=`grep "1\.2\." /tmp/connector.html|cut -d">" -f2|cut -d"<" -f1 |awk '{print $2}'|grep "1.2"|uniq`
fi
rm -rf /tmp/connector.html
echo "Install Tomcat Connector JK ${TOMCAT_CONNECTOR_VERSION}"
if [ ! -r tomcat-connectors-${TOMCAT_CONNECTOR_VERSION}-src.tar.gz ]; then
   wget http://${MIRROR_HOST}/tomcat/tomcat-connectors/jk/tomcat-connectors-${TOMCAT_CONNECTOR_VERSION}-src.tar.gz
fi
tar zxvf tomcat-connectors-${TOMCAT_CONNECTOR_VERSION}-src.tar.gz
cd tomcat-connectors-${TOMCAT_CONNECTOR_VERSION}-src/native
./buildconf.sh
./configure --with-apxs=/usr/sbin/apxs
make
/etc/init.d/httpd stop
make install
/etc/init.d/httpd start
十鼎 wrote:为了增加积分功能,我为数据库表jforum_users添加了一个字段tally(类型为int,默认值为0),并修改了需要的相关SQL语句和数据库操作代码(主要是读取和更新user info),并为net.jforum.entities.User类添加成员 int tally;以及get、set函数。

看了下数据库表jforum_posts里面,没有7天内的post记录。

构建项目的时候出现以下错误提示:
------------------------------
...
Failed tests:
testListPosts(net.jforum.summary.SummaryTest): null

Tests run: 62, Failures: 1, Errors: 0, Skipped: 0
...
------------------------------

分析代码,失败原因是testListPosts函数中的获取一周post list为空。我并不十分理解这里的post list是由哪部分测试用例创建的,是SummaryTest用例产生的,还是包含了本次构建所有测试用例产生的?跟我修改jforum_users 的表结构是否有关联?

我查看了关于获取和更新jforum_posts表的SQL语句和相关操作代码,看起来并没有与Jforum_users的tally字段有相交。

请andowson指教一二! 如能介绍下项目的测试用例功能的概况和原理就更佳了。

谢谢了!


这个问题经过半天的了解,总结一下:
构建过程中使用到的数据库是由执行脚本文件:mysql_data_dump.sql更新的,所以开始构建项目前需要执行一下这个脚本,执行后,jforum_posts表中多了一个表项,内容为:“Welcome to JForum”。

每次构建过程执行的SummaryTest用例会测试发送发表文章摘要功能,这个用例使用的时间范围是7天,如果执行脚本mysql_data_dump.sql超过7天,即7天内没有新发表文章,则构建项目时该测试用例会得到空的post list。

这个测试用例似乎需要重新考虑文章摘要的时间范围。



SummaryTest中的post list如您所理解的,是去抓取資料庫中目前七天內發表的新文章,測試案例中所發表的文章會於測試完畢時自動刪除,故這些文章的來源是由使用者自行部署到Tomcat webapps去測試時產生。
以我自己來說,我每次執行完Eclipse的Run As > maven package後,會將target\jforum目錄copy回Tomcat的webapps目錄下去進行測試,使用的資料庫名稱就是jforum,與Eclipse所連的測試資料庫一致。
依序執行下列步驟
yum -y install tftp-server
chkconfig tftp on
chkconfig xinetd on
chmod 777 /tftpboot
/etc/init.d/xinetd start


常見問題:
TFTP: Error code 1: File not found
當把資料透過tftp上傳到Linux時會出現Error code 1: File not found的錯誤,此時只要先在/tftpboot目錄下用touch指令建立該檔案,並將該檔案存取權限設定為777即可。
touch config.text
chmod 777 config.text


參考資料:
http://www.question-defense.com/2008/11/13/linux-setup-tftp-server-on-centos
十鼎 wrote:问题7、似乎无法使用文章审核功能?

請修改樣板檔/admin/forum_form.htm第212行的mailIntegration.isSSL()為mailIntegration.isSsl()即可:
<td><input type="checkbox" name="requires_ssl" value="1" <#if mailIntegration?exists && mailIntegration.isSsl()>checked="checked"</#if> /></td>


測試方式:
1.系統管理控制台 > 版面管理 > 建立新版面
版面名稱 Moderated Forum
審核這個版面? 是
權限
將沒選到的這些群組設為禁止存取: Administration General
將沒選到的這些群組設為禁止匿名發表:
將沒選到的這些群組設為唯讀: Administration General
將沒選到的這些群組設為在訊息中禁止使用 HTML: Administration General
[更新]
群組管理
群組名稱 動作 刪除 安全性
Administration 編輯群組 權限
點選權限

版面管理
不能審核這些版面: 允許全部
[儲存]
2.註冊一個新的使用者
恭喜您!

您已經完成註冊程序. 您可以按 這裡 填寫更多個人資料以及選取個人頭像, 或點選 這裡 回到首頁.

記得喔!您隨時可以點選網頁上方的 "個人資料" 連結來修改您的個人資料.

3.點選 這裡 回到首頁並在Moderated Forum發表文章,出現下列訊息:
這是一個需要審核的版面.
您的文章正在等候版面管理員分析處理. 請耐心等候一下.

按這裡 繼續.

討論區首頁
4.登出
5.使用Admin帳號登入
6.系統管理控制台 > 文章審核
今天發現CentOS 6.0已經於2011/07/10釋出了

釋出消息
http://lists.centos.org/pipermail/centos-announce/2011-July/017645.html

下載(只有DVD iso)
http://ftp.tcc.edu.tw/Linux/CentOS/6/isos/

參考資料:
http://wiki.centos.org/Manuals/ReleaseNotes/CentOS6.0
十鼎 wrote:问题5:指定版面的版主却可以删除其他版面的文章或者主题。
首先在管理后台的“会员分组”为一个会员所在的群组设置权限: 版主->是否允许设置为版主 设置为“是”;是否在允许的版块里审核/封锁贴子 设置为“是”;不能修改的论坛 设置为指定版面除外的所有其他版面。

这样就可以将某个会员设置为指定版面的版主了(我是这么理解的)。现在的问题是一个版面的版主不应该有权修改或者删除其他版面的主题的文章,除非该文章是他(她)发布的。

问题6:在封锁控制中添加了对某个用户ID的封锁,登陆后得到已经被封锁的提示,但是无法再以游客的身份浏览本网站了,点击"注销"和"论坛首页"都没有任何响应。 合理的希望应该是点击"注销"和"论坛首页"时以游客身份回到首页。


問題5的處理:
修改post_show_action_buttons_inc.htm: 第18行及第22行,如下:
		<#if canEditCurrentMessage && (((post.userId == session.userId) && (session.userId != 1)) || isModerator || isAdmin)>
			<a href="${JForumContext.encodeURL("/${moduleName}/edit/${start}/${post.id}")}" rel="nofollow" class="icon_edit"><img src="${contextPath}/images/transp.gif" alt="" /></a>  
		</#if>

		<#if canRemove && (((post.userId == session.userId) && (session.userId != 1)) || isModerator || isAdmin)>
			<a href="${JForumContext.encodeURL("/${moduleName}/delete/${start}/${post.id}")}" id="delete${post.id}" onclick="return confirmDelete(${post.id});"><img src="${contextPath}/templates/${templateName}/images/icon_delete.gif" alt="[Delete]" /></a>  
		</#if>


問題6的處理:
修改JForum.java第210行,加上條件判斷:
				final boolean shouldBan = this.shouldBan(request.getRemoteAddr());
				
				if (shouldBan && !"logout".equals(request.getAction())) {
					moduleClass = ModulesRepository.getModuleClass("forums");
					context.put("moduleName", "forums");
					((WebRequestContext)request).changeAction("banned");
				}
十鼎 wrote:
问题2、发表主题时,过长的标题会使得首页的“最后发表”栏自动调整宽度,而不折行,结果会破坏首页布局效果;

請修改forum_list.htm,將下列的程式碼複製貼到<#include "bottom.htm"/>之前即可:
<script type="text/javascript"> 
/* <![CDATA[ */
function limitTitleSize()
{
    $(".last_title").each(function () {
        var value = $(this).text();
        
        if (value.length > 30) {
            $(this).text(value.substring(0, 30) + "...");
        }
    });
}

$(document).ready(function() {
	limitTitleSize();
 
});
/* ]]> */
</script>


十鼎 wrote:为主题的文章进行缓存功能,我感觉有问题(我的理解),如果我理解有误还请指教。楼主,你的理解如何?


應該是有問題沒錯,有可能是我誤改了原來的程式碼
trunk/src/main/java/net/jforum/repository/PostRepository.java的118行:
posts = pm.selectAllByTopicByLimit(topicId, start, count);

將其還原為:
posts = pm.selectAllByTopic(topicId);

再測測看吧!

另外,您在發表程式碼時可否幫忙加上code的標籤,以便套用原始碼排版?謝謝您!
可參考這篇的說明:
http://www.andowson.com/posts/list/133.page
十鼎 wrote:
andowson wrote:
十鼎 wrote:问题3、每个主题里面的回复没有楼层数字(即回复的次数),有楼层数字会得到更直观的信息表达;

可以修改templates/default/post_show_action_buttons_inc.htm的第4行,於行首加上#${post_index+1+start}成為:
#${post_index+1+start}<a href="${JForumContext.encodeURL("/posts/list/${startStr}${post.topicId}")}#p${post.id}">


嗯,我也已经改好了。
顺便说一下,我在杭州访问你的网站感觉速度有点慢。

可否請您不吝分享您的修正方式,謝謝~
我也感覺到最近有點變慢的樣子,可能是流量上升的關係吧。
十鼎 wrote:问题4、在使用后台管理的封锁控制功能时,添加新的封锁控制,不管选什么封锁类型,点击“更新”会引起异常。
异常提示信息见附件抓图:

這個問題跟資料庫有關,由於我使用的是PostgreSQL資料庫,沒有這個問題,但是MySQL之類的資料庫就會有。
修改一下/trunk/src/main/java/net/jforum/dao/generic/GenericBanlistDAO.java的第93-94行:
        public void insert(final Banlist banlist)
        {
                PreparedStatement pstmt = null;
                
                try {
                        pstmt = JForumExecutionContext.getConnection().prepareStatement(
                                SystemGlobals.getSql("BanlistModel.insert"));
                        ...
        }

改為如下:
        public void insert(final Banlist banlist)
        {
                PreparedStatement pstmt = null;
                
                try {
                        pstmt = this.getStatementForAutoKeys("BanlistModel.insert");
                        ...
        }
十鼎 wrote:问题3、每个主题里面的回复没有楼层数字(即回复的次数),有楼层数字会得到更直观的信息表达;

可以修改templates/default/post_show_action_buttons_inc.htm的第4行,於行首加上#${post_index+1+start}成為:
#${post_index+1+start}<a href="${JForumContext.encodeURL("/posts/list/${startStr}${post.topicId}")}#p${post.id}">
十鼎 wrote:测试中发现投票功能BUG,版本2.3.0,在2.2.1上没有出现。
现象:发起一个投票的主题后,自己或者其他可投票的会员点击“检视结果”,出现异常。投票帖和异常抓图见附件。


請修改一下templates/default/post_show.htm第113行:

<span class="gensmall" style="text-align:center"><a href="${JForumContext.encodeURL("/posts/list/${topic.id}")}?viewResults=true">${I18n.getMessage("PostShow.showPollResults")}</a></span>
感謝您的熱心協助,如果您有發現新的問題,將會併入下一版JForum 2.3.1中修正。
 
Forum Index » Profile for andowson » Messages posted by andowson
Go to: