问题描述
dwr.xml 部分<dwr> <allow> <create creator="spring" scope="application" javascript="Chat"> <param name="beanName" value="messageAction" /> </create> <convert converter="bean" match="XX.Message" /> <convert converter="bean" match="XX.Role" /> </allow></dwr>Action 部分 WebContext wctx = WebContextFactory.get(); String currentPage = wctx.getCurrentPage(); Collection<ScriptSession> sessions = wctx.getScriptSessionsByPage(currentPage); ScriptProxy s = new ScriptProxy(sessions); s.addFunctionCall("receiveMessages", msg, role);msg和role 就是两个实体类对象了 ,作为参数传到页面上的receiveMessages方法 。问题1:比如 Message有个属性是个实体类 Question , 怎么设置都没法set ,msg.setQuestion(Question 的实体类对象); 说Question 未反转之类的错误,我在dwr.xml加了 Question 也还是报错,希望可以解释一下 。页面部分 function receiveMessages(msg,role) { var chatlog = Ext.getCmp('chatlog'); var tpl = new Ext.XTemplate( '<tpl if="type == 2">', '<tpl if="this.parseLegionName() == legionName">', '<p>{legionName}<a class="juntuan" href="#" onclick="showReceiver();">{sender}</a>: {content:this.parseContent}</p>', '</tpl>', '</tpl>', { compiled : true, parseContent : function(content) { return Ext.util.Format.nl2br(Ext.util.Format.htmlEncode(content)); }, parseLegionName : function() { return legionName='${Session ["role"].legionName?default('数据异常')}'; } } ); tpl.append(chatlog.body, msg); tpl.append(chatlog.body, role); } Message的属性 sender , Role的属性legionName 。问题2 : '<tpl if="this.parseLegionName() == legionName">', 这个不起作用 ,输出内容只输出 {sender} , {legionName}出不来 。如果把输出内容不做判断 减少为 '<p>{legionName}<a class="juntuan" href="#" onclick="showReceiver();">{sender}</a>: {content:this.parseContent}</p>',输出的结果变成了: (sender 的值) : 加内容 //一行 (legionName的值) : 不加内容 //;另外一行明明是在同一个<p>标签里面,怎么换成两行输出,跟什么有关我不清楚 。问题3:输出内容的 A标签的 onclick方法 不能带字符串参数,数字可以,是我未进行转义吗 ?onclick="showReceiver('{sender}'); 不行
解决方案
2、 出现2行是应该你append 2次照成的。'<tpl if="this.parseLegionName() == legionName">' 就要看你的parseLegionName返回值是否等于 Role的属性legionName 值。因为第一次tpl.append(chatlog.body, msg); 的时候msg没有legionName 属性会出现错误。你可以改成 tpl.append(chatlog.body, Ext.applyIf(msg,role));3、字符串需要加 冒号或者双引号。'{sender}' "{sender}"