﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-guanxf-随笔分类-Jfinal</title><link>http://www.blogjava.net/17learning/category/53415.html</link><description>我的博客：http://blog.sina.com.cn/17learning</description><language>zh-cn</language><lastBuildDate>Sun, 19 May 2013 20:21:09 GMT</lastBuildDate><pubDate>Sun, 19 May 2013 20:21:09 GMT</pubDate><ttl>60</ttl><item><title>Jfinal读取Freemarker后renderHtml 源码</title><link>http://www.blogjava.net/17learning/archive/2013/05/19/399469.html</link><dc:creator>管先飞</dc:creator><author>管先飞</author><pubDate>Sun, 19 May 2013 06:16:00 GMT</pubDate><guid>http://www.blogjava.net/17learning/archive/2013/05/19/399469.html</guid><wfw:comment>http://www.blogjava.net/17learning/comments/399469.html</wfw:comment><comments>http://www.blogjava.net/17learning/archive/2013/05/19/399469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/17learning/comments/commentRss/399469.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/17learning/services/trackbacks/399469.html</trackback:ping><description><![CDATA[<div>1、Controller：<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Map&lt;String, Object&gt; rootMap = new HashMap&lt;String, Object&gt;();</div><div><span style="white-space:pre">		</span>ootMap.put("list",getMusicPublisList(page.getList()));</div><div><span style="white-space: pre;">		</span>String templateName="appweb/music/index.ftl";</div><div><span style="white-space:pre">	</span> &nbsp; <span style="white-space:pre">	</span>Render appRender=new AppFreeMarkerRender(rootMap,templateName);</div><div><span style="white-space:pre">	</span> &nbsp; <span style="white-space:pre">	</span>this.render(appRender);<br /></div><div>2、AppFreeMarkerRender（在FreeMarkerRender上修改）：<br /><div>package com.microcorecn.common.utils;</div><div>import java.io.PrintWriter;</div><div>import java.util.Enumeration;</div><div>import java.util.HashMap;</div><div>import java.util.Locale;</div><div>import java.util.Map;</div><div>import java.util.Properties;</div><div>import javax.servlet.ServletContext;</div><div></div><div>import com.jfinal.render.Render;</div><div>import com.jfinal.render.RenderException;</div><div></div><div>import freemarker.template.Configuration;</div><div>import freemarker.template.ObjectWrapper;</div><div>import freemarker.template.Template;</div><div>import freemarker.template.TemplateException;</div><div>import freemarker.template.TemplateExceptionHandler;</div><div></div><div>/**</div><div>&nbsp;* FreeMarkerRender.</div><div>&nbsp;*/</div><div>public class AppFreeMarkerRender extends Render {</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>private static final long serialVersionUID = -7649769283048920381L;</div><div><span style="white-space:pre">	</span>private transient static final String encoding = getEncoding();</div><div><span style="white-space:pre">	</span>private transient static final String contentType = "text/html; charset=" + encoding;</div><div><span style="white-space:pre">	</span>private String templateName;</div><div><span style="white-space:pre">	</span>private Map&lt;String, Object&gt; &nbsp;rootMap;</div><div><span style="white-space:pre">	</span>public AppFreeMarkerRender(Map&lt;String, Object&gt; rootMap, String templateName) {</div><div><span style="white-space:pre">		</span> &nbsp; this.templateName=templateName;</div><div><span style="white-space:pre">		</span> &nbsp; this.rootMap=rootMap;</div><div><span style="white-space:pre">	</span>}</div><div></div><div></div><div>&nbsp; &nbsp;&nbsp;</div><div><span style="white-space:pre">	</span>@SuppressWarnings({"unchecked", "rawtypes"})</div><div><span style="white-space:pre">	</span>public void render() {</div><div><span style="white-space:pre">		</span>response.setContentType(contentType);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; Enumeration&lt;String&gt; attrs = request.getAttributeNames();</div><div><span style="white-space:pre">		</span>Map root = new HashMap();</div><div><span style="white-space:pre">		</span>while (attrs.hasMoreElements()) {</div><div><span style="white-space:pre">			</span>String attrName = attrs.nextElement();</div><div><span style="white-space:pre">			</span>root.put(attrName, request.getAttribute(attrName));</div><div><span style="white-space:pre">		</span>}</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;root.putAll(rootMap);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div><span style="white-space:pre">		</span>PrintWriter writer = null;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; try {</div><div><span style="white-space:pre">			</span>Template template = FreemarkerUtil.getAppConfiguration().getTemplate(this.templateName);</div><div><span style="white-space:pre">			</span>writer = response.getWriter(); &nbsp;//一边请求，一边render</div><div><span style="white-space:pre">			</span>template.process(root, writer);<span style="white-space:pre">		</span>// Merge the data-model and the template</div><div><span style="white-space:pre">		</span>} catch (Exception e) {</div><div><span style="white-space:pre">			</span>throw new RenderException(e);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>finally {</div><div><span style="white-space:pre">			</span>if (writer != null)</div><div><span style="white-space:pre">				</span>writer.close();</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div>}</div><div></div><div>3、FreemarkerUtil ：<br />package com.microcorecn.common.utils;</div><div>import java.io.BufferedWriter;</div><div>import java.io.File;</div><div>import java.io.FileOutputStream;</div><div>import java.io.IOException;</div><div>import java.io.OutputStreamWriter;</div><div>import java.io.StringWriter;</div><div>import java.io.Writer;</div><div>import java.util.Enumeration;</div><div>import java.util.HashMap;</div><div>import java.util.Map;</div><div></div><div>import javax.servlet.http.HttpServletRequest;</div><div>import javax.servlet.http.HttpServletResponse;</div><div></div><div>import com.jfinal.kit.PathKit;</div><div>import com.jfinal.render.FreeMarkerRender;</div><div></div><div>import freemarker.cache.FileTemplateLoader;</div><div>import freemarker.template.Configuration;</div><div>import freemarker.template.DefaultObjectWrapper;</div><div>import freemarker.template.Template;</div><div></div><div>/**</div><div>&nbsp;* freemarker生成html的工具类</div><div>&nbsp;*&nbsp;</div><div>&nbsp;* @author Administrator</div><div>&nbsp;*&nbsp;</div><div>&nbsp;*/</div><div>public class FreemarkerUtil {</div><div><span style="white-space:pre">	</span>//保存所有参数,js路径,cs路径等</div><div><span style="white-space:pre">	</span>private static Map&lt;String, Object&gt; releaseParams = new HashMap&lt;String, Object&gt;();</div><div><span style="white-space:pre">	</span>static{</div><div><span style="white-space:pre">		</span>//releaseParams.put("csspath", "");</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>//配置</div><div><span style="white-space:pre">	</span>private static Configuration config = null;</div><div><span style="white-space:pre">	</span>private static Configuration appConfig = null;</div><div><span style="white-space:pre">	</span>/**</div><div><span style="white-space:pre">	</span> * appConfig配置所有参数</div><div><span style="white-space:pre">	</span> * 重写freemarker中的 &nbsp;reader方法，读取该配置文件</div><div><span style="white-space:pre">	</span> * @return</div><div><span style="white-space:pre">	</span> */</div><div><span style="white-space:pre">	</span>public static Configuration getAppConfiguration()</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>if(appConfig == null)</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>//从freemarker中获取所有配置</div><div><span style="white-space:pre">			</span>appConfig = (Configuration)FreeMarkerRender.getConfiguration().clone();</div><div><span style="white-space:pre">			</span>try {</div><div><span style="white-space:pre">				</span>//设置模板路径</div><div><span style="white-space:pre">				</span>/*<span style="white-space:pre">	</span>config.setDirectoryForTemplateLoading(new File(PathKit.getWebRootPath()));</div><div><span style="white-space:pre">				</span>config.setObjectWrapper(new DefaultObjectWrapper());*/</div><div><span style="white-space:pre">				</span>appConfig.setDirectoryForTemplateLoading(new File(PathKit.getWebRootPath()+"/WEB-INF/views/"));</div><div><span style="white-space:pre">				</span>appConfig.setObjectWrapper(new DefaultObjectWrapper()); &nbsp;&nbsp;</div><div><span style="white-space:pre">			</span>} catch (IOException e) {</div><div><span style="white-space:pre">				</span>// TODO log</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>return appConfig;</div><div><span style="white-space:pre">	</span>}</div><div></div><div></div></div><img src ="http://www.blogjava.net/17learning/aggbug/399469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/17learning/" target="_blank">管先飞</a> 2013-05-19 14:16 <a href="http://www.blogjava.net/17learning/archive/2013/05/19/399469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jfinal不能使用别名，p6spy监控数据库日志</title><link>http://www.blogjava.net/17learning/archive/2013/04/02/397307.html</link><dc:creator>管先飞</dc:creator><author>管先飞</author><pubDate>Tue, 02 Apr 2013 10:40:00 GMT</pubDate><guid>http://www.blogjava.net/17learning/archive/2013/04/02/397307.html</guid><wfw:comment>http://www.blogjava.net/17learning/comments/397307.html</wfw:comment><comments>http://www.blogjava.net/17learning/archive/2013/04/02/397307.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/17learning/comments/commentRss/397307.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/17learning/services/trackbacks/397307.html</trackback:ping><description><![CDATA[<div>问题原因：JFinal中根据索引查询列名。<br />1、重新新建DB类：<br />package com.microcorecn.jfinalex;</div><div></div><div>import java.sql.Connection;</div><div>import java.sql.PreparedStatement;</div><div>import java.sql.ResultSet;</div><div>import java.sql.SQLException;</div><div>import java.util.ArrayList;</div><div>import java.util.List;</div><div></div><div>import com.jfinal.plugin.activerecord.ActiveRecordException;</div><div>import com.jfinal.plugin.activerecord.DbKit;</div><div></div><div>public class DbEx {</div><div><span style="white-space:pre">	</span>static &lt;T&gt; List&lt;T&gt; query(Connection conn, String sql, Object... paras) throws SQLException {</div><div><span style="white-space:pre">		</span>List result = new ArrayList();</div><div><span style="white-space:pre">		</span>PreparedStatement pst = conn.prepareStatement(sql);</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>for (int i=0; i&lt;paras.length; i++) {</div><div><span style="white-space:pre">			</span>pst.setObject(i + 1, paras[i]);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>// for (int i=0; i&lt;paras.length; i++) {</div><div><span style="white-space:pre">			</span>// pst.setObject(i + 1, paras[i]);</div><div><span style="white-space:pre">		</span>// }</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>ResultSet rs = pst.executeQuery();</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>int colAmount = rs.getMetaData().getColumnCount();</div><div><span style="white-space:pre">		</span>String[] cols = new String[colAmount];</div><div><span style="white-space:pre">		</span>for(int i = 0; i &lt; colAmount; ++i)</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>cols[i] = rs.getMetaData().getColumnLabel(i + 1);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>if (colAmount &gt; 1) {</div><div><span style="white-space:pre">			</span>while (rs.next()) {</div><div><span style="white-space:pre">				</span>Object[] temp = new Object[colAmount];</div><div><span style="white-space:pre">				</span>for (int i=0; i&lt;colAmount; i++) {</div><div><span style="white-space:pre">					</span>temp[i] = rs.getObject(cols[i]);</div><div><span style="white-space:pre">				</span>}</div><div><span style="white-space:pre">				</span>result.add(temp);</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>else if(colAmount == 1) {</div><div><span style="white-space:pre">			</span>while (rs.next()) {</div><div><span style="white-space:pre">				</span>result.add(rs.getObject(cols[0]));</div><div><span style="white-space:pre">			</span>}</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>if (rs != null) {try {rs.close();} catch (SQLException e) {}}</div><div><span style="white-space:pre">		</span>if (pst != null) {try {pst.close();} catch (SQLException e) {}}</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">		</span>return result;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>public static &lt;T&gt; List&lt;T&gt; query(String sql, Object... paras) {</div><div><span style="white-space:pre">		</span>Connection conn = null;</div><div><span style="white-space:pre">		</span>try {</div><div><span style="white-space:pre">			</span>conn = DbKit.getConnection();</div><div><span style="white-space:pre">			</span>return query(conn, sql, paras);</div><div><span style="white-space:pre">		</span>} catch (Exception e) {</div><div><span style="white-space:pre">			</span>throw new ActiveRecordException(e);</div><div><span style="white-space:pre">		</span>} finally {</div><div><span style="white-space:pre">			</span>DbKit.close(conn);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div>}</div><div>2、查询信息：<br /><div>List&lt;Object[]&gt; &nbsp;newAlbum=DbEx.query(sb.toString(), singerItem.get("id"));</div><div><span style="white-space:pre">			</span>if (newAlbum!= null) {</div><div><span style="white-space:pre">				</span>for(Object[] obj:newAlbum){</div><div><span style="white-space:pre">					</span> item.setBfpSingerId(obj[0]==null?"":obj[1].toString());</div><div><span style="white-space:pre">					</span> item.setSingerName(obj[1]==null?"":obj[1].toString());</div><div><span style="white-space:pre">					</span> item.setImgUrl(obj[2]==null?"":obj[2].toString());</div><div><span style="white-space:pre">					</span> item.setBfpAlbumId(obj[3]==null?"":obj[3].toString());</div><div><span style="white-space:pre">					</span> item.setNewAlbumName(obj[4]==null?"":obj[4].toString());</div><div><span style="white-space:pre">				</span>}</div><div><span style="white-space:pre">			</span></div><div><span style="white-space:pre">			</span>}&nbsp;</div><br /></div><img src ="http://www.blogjava.net/17learning/aggbug/397307.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/17learning/" target="_blank">管先飞</a> 2013-04-02 18:40 <a href="http://www.blogjava.net/17learning/archive/2013/04/02/397307.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JFinal获取字符串json或者获取list返回Json对象。</title><link>http://www.blogjava.net/17learning/archive/2013/03/15/396464.html</link><dc:creator>管先飞</dc:creator><author>管先飞</author><pubDate>Fri, 15 Mar 2013 01:05:00 GMT</pubDate><guid>http://www.blogjava.net/17learning/archive/2013/03/15/396464.html</guid><wfw:comment>http://www.blogjava.net/17learning/comments/396464.html</wfw:comment><comments>http://www.blogjava.net/17learning/archive/2013/03/15/396464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/17learning/comments/commentRss/396464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/17learning/services/trackbacks/396464.html</trackback:ping><description><![CDATA[<div>Object data=getObject();<br />if(data instanceof String) {</div><div><span style="white-space: pre;">&nbsp;    </span> this.renderJson((String)data);</div><div>&nbsp; }else {</div><div><span style="white-space: pre;">&nbsp;   </span>this.renderJson(data);</div><div>}</div><img src ="http://www.blogjava.net/17learning/aggbug/396464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/17learning/" target="_blank">管先飞</a> 2013-03-15 09:05 <a href="http://www.blogjava.net/17learning/archive/2013/03/15/396464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>