チャットを作ってみました。

簡単な、チャットを作ってみました。
まー、あれです<とか>の対策してないんでそんな発言すると逝きます。
サンプルなんで我慢してください!

苦労したのがhttpリクエスト時にPOSTメソッドで送る方法で、
何故かPOSTする際は↓の用にしないといけないらしい。
dataset.setQueryType("POST");

chat.lzx

<?xml version="1.0" encoding="UTF-8" ?>
<canvas width="600" height="400" debug="true" bgcolor="0xcccccc">
	
	<dataset name="contacts" request="true" type="http" 
		src="chat.xml.jsp" />

	<debug x="0" y="250" height="150" width="580" />

	<window x="5" y="5" width="550" height="250" resizable="true">

		<form width="100%" inset_top="0" inset_right="0" inset_bottom="0" inset_left="0" >
				<submit name="survey" data="${contacts}"/>
				<view width="100%">
					<edittext name="name" width="50"></edittext>
					<edittext name="message" options="releasetolayout"></edittext>
					<button width="50" isdefault="true" onclick="processData()">Send
						<method name="processData">
contacts.setQueryType("POST");
parent.parent.survey.submit();
						</method>
					</button>
					<resizelayout axis="x" />
				</view>
		</form>
		<grid datapath="contacts:/chat/" width="100%" bgcolor0="0xfff8ee"
			options="releasetolayout">
			<gridcolumn width="80">
				Name
				<text datapath="name/text()" />
			</gridcolumn>
			<gridcolumn width="300">
				Message
				<text datapath="message/text()" />
			</gridcolumn>
			<gridcolumn width="100">
				Date
				<text datapath="date/text()" />
			</gridcolumn>
			<gridcolumn>
				Meta
				<text datapath="meta/text()" />
			</gridcolumn>
		</grid>
		<resizelayout axis="y" />
	</window>
</canvas>

chat.xml.jsp

<%--
--%><%@ page contentType="application/xml; charset=utf-8" %><%--
--%><%@ page import="java.util.*" %><%--
--%><%


	String name=request.getParameter("name");
	synchronized(session){
		if(name==null || "".equals(name.trim())){
			name=(String)session.getAttribute("name");
		}else{
			name=(new String(name.getBytes("iso-8859-1"), "utf-8")).trim();
			session.setAttribute("name",name);
		}
	}
	//boolean isNew=(name==null);
	
	request.setCharacterEncoding("utf-8");
	//request.setCharacterEncoding("Windows-31J");
	
	List messages = (List)application.getAttribute("chat");
	if(messages == null){
		messages = new ArrayList();
		application.setAttribute("chat",messages);
	}
	
	synchronized(messages){
		String message=request.getParameter("message");
		if( message!=null && !"".equals(message.trim()) ){
			Map m = new HashMap();
			m.put("name",name);
			m.put("message",new String(message.getBytes("iso-8859-1"), "utf-8"));
			m.put("date",new Date());
			m.put("meta",request.getMethod()+"-"+session.getId());
			messages.add(m);
			if(15<messages.size()){
				messages.remove(0);
			}
		}
	}
	//Collections.reverse(messages);
	Object msgs[] = messages.toArray();
	

%>
<chat>
<%
	for(int i=msgs.length-1;i>=0;i--){
		Map m = (Map)msgs[i];
%>
	<statement>
		<name><%= m.get("name") %></name>
		<message><%= m.get("message") %></message>
		<date><%= m.get("date") %></date>
		<meta><%= m.get("meta") %></meta>
	</statement>
<%
	}
%>
</chat>