2018-09-05 11:31

@JFinal 看来我立功了,哦也。

2018-09-05 11:11

JsonRender的jsonText是private,而且没有set方法,不方便 简单的重写额。
(感觉 有点坑 o(︶︿︶)o )

public class JtnJsonRender extends JsonRender{

public JtnJsonRender(Object object) {
super.jsonText = MyJsonKit.toJson(object);
}
}
只能重写render方法,或者copy源代码,大范围地重写代码才行。

renderJson(String jsonString)。这种比较灵活,就是和常见代码不太一致。
总之,还是看实际情况,怎么用着方便恰当就怎么用。
目前采用扩展 增加JsonEvent的方式。

方法的确多种多样。

2018-09-05 11:00

逐步精通JFinal,尽可能不用Spring,今后自己当boss。(*^__^*)
render(new MyJsonRender(...)); 这个做法 也很不错。

2018-09-05 09:50

解决方案:增加 json序列化时间通知

public void configConstant(Constants me) {
me.setJsonFactory(JtnMixedJsonFactory.me());
}

package com.jtn.jfinal.extend.json;

import com.jfinal.json.FastJson;
import com.jfinal.json.JFinalJson;
import com.jfinal.json.Json;
import com.jfinal.json.MixedJsonFactory;
import com.jtn.jfinal.extend.JsonEvent;
/**
* 扩展JFinal的MixedJsonFactory,实现Json序列化事件通知。
* @author fansunion
*
* 2018年9月5日
*/
public class JtnMixedJsonFactory extends MixedJsonFactory {
private static final JtnMixedJsonFactory me = new JtnMixedJsonFactory();

public static MixedJsonFactory me() {
return me;
}

private static MixedJson mixedJson = new MixedJson();

public Json getJson() {
return mixedJson;
}

private static class MixedJson extends Json {

private static JtnJFinalJson jFinalJson = JtnJFinalJson.getJson();
private static FastJson fastJson = FastJson.getJson();

public String toJson(Object object) {
return jFinalJson.toJson(object);
}

public T parse(String jsonString, Class type) {
return fastJson.parse(jsonString, type);
}
}

private static class JtnJFinalJson extends JFinalJson{

public static JtnJFinalJson getJson() {
return new JtnJFinalJson();
}

@Override
public String toJson(Object value, int depth) {
boolean instanceOfJsonEvent = value instanceof JsonEvent;
JsonEvent jsonEvent=null;
if(instanceOfJsonEvent){
jsonEvent=( JsonEvent)value;
}
//json序列化前,回调
if(jsonEvent != null){
jsonEvent.beforeToJson(value);
}
//json序列化
String json=super.toJson(value, depth);
//json序列化后,回调
if(jsonEvent != null){
((JsonEvent)value).afterToJson(json);
}
return json;
}
}
}

2018-09-05 08:46

重写 JsonRender的buildJsonText方法。
序列化实际上是这个 this.jsonText = JsonKit.toJson(map);
public static String toJson(Object object) {
return Json.getJson().toJson(object);
}

重写JFianlJson等具体Json的
protected String toJson(Object value, int depth) {
if(value == null || (depth--) < 0)
return "null";

if(value instanceof String)
return "\"" + escape((String)value) + "\"";

if(value instanceof Double){
if(((Double)value).isInfinite() || ((Double)value).isNaN())
return "null";
else
return value.toString();
}

if(value instanceof Float){
if(((Float)value).isInfinite() || ((Float)value).isNaN())
return "null";
else
return value.toString();
}

2018-09-05 08:41

代码简单,架构清晰 就是好啊。Spring等老外的都是一坨屎,一层套一层。

2018-09-05 08:40

ActionHandler

Render render = controller.getRender();
if (render instanceof ForwardActionRender) {
String actionUrl = ((ForwardActionRender)render).getActionUrl();
if (target.equals(actionUrl)) {
throw new RuntimeException("The forward action url is the same as before.");
} else {
handle(actionUrl, request, response, isHandled);
}
return ;
}

if (render == null) {
render = renderManager.getRenderFactory().getDefaultRender(action.getViewPath() + action.getMethodName());
}
render.setContext(request, response, action.getViewPath()).render();

会调用JSONRender

public void render() {
if (jsonText == null) {
buildJsonText();
}

PrintWriter writer = null;
try {
response.setHeader("Pragma", "no-cache"); // HTTP/1.0 caches might not implement Cache-Control and might only implement Pragma: no-cache
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);

response.setContentType(forIE ? contentTypeForIE : contentType);
writer = response.getWriter();
writer.write(jsonText);
writer.flush();
} catch (IOException e) {
throw new RenderException(e);
}
}

2018-09-01 21:02

@JFinal 理解,看到JFinal都这么搞,我就放心了。 尽可能简化代码,数据库 按照java命名搞, Service只需要实现类,根本不需要再多定义一个借口。启动速度 又非常快。比Spring那一套快多了。 目前做的项目还不多,已经知道的JFinal生态不如Spring。后面遇到问题 再解决。

2018-09-01 19:50

FastJson还有 循环引用的问题,搞了个 扩展,就好了。 分享了。下班2~