设为首页 收藏本站
查看: 1271|回复: 0

[经验分享] OpenLaszlo在Resin上的部署以及开发

[复制链接]

尚未签到

发表于 2017-2-20 12:31:15 | 显示全部楼层 |阅读模式
早就关注过openlaszlo这个开源的ria的东东了,感觉做出的界面还是比较美观的,但由于时间原因一直都没有亲自尝试使用,正好前几天有个小的需求,所以就拿来进行一下实验,看看效果如何。
由于公司用的服务器都是apache+resin的,在网上找了很久,也没有找到关于openlaszlo与resin整合的资料。不过好在j2ee标准针对每个j2ee容器应该还是差别不大的。于是下载完了完整的for unix的版本以后,直接把下边的web-inf和lps目录copy出来,在resin里面建立一个webapp,将这两个文件夹复制进去。 然后启动resin。
写一个最简单的lzx文件,内容如下:
<canvas><br/><text>hello,world!</text><br/></canvas>
直接在浏览器浏览<a href='http://localhost:8080/laszlo/main.lzx'>http://localhost:8080/laszlo/main.lzx</a>
这时如果浏览器出现了一个空白的flash,并且左上角有"hello,world"的字,说明配置已经成功了。
如果提示错误,就得查看一下自己的配置了,如果是一个全新的resin问题可能不会很大,但如果是已经跑了应用的resin,lib下面有一些常用的jar,就可能会出问题了,有时会出现xml解析器相关的错误,这有可能是xercesimpl这个包活着是jdom的版本过低造成的,换上一个最新版本应该就会ok。
再写一个带窗口的程序:
<canvas><br/><text>hello,world!</text><br/><window x="10" y="10" width="400" height="300" title="测试" font="宋体" fontsize="14"><br/></window><br/></canvas>
再浏览一下,很可能会出现如下的错误:
<h1>compilation errors</h1><code class='error'>base/basecomponent.lzx:50:1: syntax error: the token "{" was not expected at this position.</code>
<code class='error'>不知道是否还是xml解析器的问题,打开base/basecomponent.lzx文件,找到提示的第50行,发现这里的属性值中间有换行符,所以可能解析出错了。将属性的值中间的换行删掉,再刷新页面,又发现另外一个地方一样的这样的提示,再找到修改,就这样一直找一直改,提示哪个文件就修改哪个文件,最后终于出现了期待已久的页面。不过这样的工作量实在很大,而且解决的不彻底,但目前我还未找到有效的办法解决,只好用这种笨方法暂时解决一下了,有谁知道如何解决这个问题的就拜托指点一下了。</code>
<code class='error'>经过千辛万苦,还好终于把环境和程序都调试通过了,感觉界面很清爽,而且比普通的html页面使用起来也方便,数据的请求和提交也不用再刷新页面了。这样比普通的ajax效率更高,而且支持更好,用ie和firefox都测试ok。事实上只要是支持flash的浏览器应该都会支持的不错。</code>
<code class='error'><code class='error'>另外,运行了一段时间以后,可能会出现out of memory的错误,这是由于分配给jvm的内存不够了,可以通过类似./<font size='2'>httpd.sh -xms128m -xmx256m 的方式启动resin,这样基本上就会解决。</font></code>
<code class='error'><font size='2'>另外,中文显示的问题,如果将lzx文件保存成utf-8格式显示的中文就没有问题了,否则中文会是乱码的。</font></code>
</code><code class='error'>研究了两天的时间,大概也了解了openlaszlo的运行方式、数据绑定和更新等一系列的东东,感觉这个东西还真的是比较强大。只是目前国内似乎做这方面开发的非常少,资料也不怎么好找,所以遇到问题只好去查english的帮助文档了。不知以后是否会有更多的人来支持这个强大开源的ria解决方案。</code>
<code class='error'>最后献上做的那个小应用的源码:</code>
<code class='error'>很简单,首先登录,然后根据手机号或者用户id查询用户信息:</code>
<code class='error'><canvas></code>
<code class='error'> <window name="loginwin" width="300" height="230" x="350" y="700" font="宋体" fontsize="14" title="登录窗口"><br/>  <animator attribute="y" to="180" duration="1500"/><br/>  <method event="oninit"><br/>   <br/>  </method><br/>  <view id="msgview" x="70" y="15"><br/>   <text id="message">输入用户名密码登录</text><br/>  </view><br/>  <view x="50" y="50"><br/>   <simplelayout axis="y" spacing="10"/><br/>   <view><br/>    <simplelayout axis="x" spacing="10"/><br/>    <text>用户名</text><br/>    <edittext id="username"></edittext><br/>   </view><br/>   <view><br/>    <simplelayout axis="x" spacing="10"/><br/>    <text>密 码</text><br/>    <edittext id="password"></edittext><br/>   </view><br/>   <view><br/>    <simplelayout axis="x" spacing="30"/><br/>    <button isdefault="true" >登 录    <br/>    </button><br/>    <button>取 消<br/>     <method event="onclick"><br/>      canvas.loginwin.close();<br/>     </method><br/>    </button><br/>   </view><br/>  </view><br/> </window><br/> <script><br/>  function check(){<br/>   var ds = canvas.datasets.login;<br/>   var p = new lzparam();</code>
<code class='error'>   p.addvalue("u",username.gettext());<br/>   p.addvalue("p",password.gettext());<br/>   ds.setquerystring(p);<br/>   ds.dorequest();<br/>   debug.write("login..." + username.text + " " + password.text);<br/>  }<br/> </script><br/> <dataset type="http" name="login" querystring="u=xiaowei&amp;amp;p=xiaowei" src="login.jsp" request="false"/><br/> <datapointer xpath="login:/result"><br/>  <handler name="ondata"><br/>  <![cdata[<br/>   <br/>   debug.write("recv data...");<br/>   var result = this.xpathquery("*/text()");<br/>   debug.write("result=" + result);<br/>   if(result != "ok")<br/>   {<br/>    msgview.setx(100);<br/>    message.settext(result);      <br/>   }else<br/>   {  <br/>    msgview.setx(100);<br/>    message.settext("<font color=\"#00ff00\">登录成功!</font>");<br/>    canvas.loginwin.animate("y",900,1500,false);<br/>    canvas.datawin.setvisible(true);<br/>    canvas.datawin.myanimator.dostart();<br/>   }<br/>  ]]><br/>  </handler><br/>  <handler name="onerror"><br/>  <![cdata[   <br/>   debug.write("on error");<br/>  ]]><br/>  </handler><br/> </datapointer><br/> </code>
<code class='error'> <dataset name="user" src="query.jsp" request="true" type="http"/></code>
<code class='error'> <window name="datawin" x="200" y="900" width="500" height="400" title="查询邦号" font="宋体" fontsize="14"><br/>  <animator name="myanimator" attribute="y" to="120" duration="1500" start="false"/><br/>  <method event="oninit"><br/>   this.setvisible(false);<br/>  </method><br/>  <view x="10" y="20" width="500" height="50"><br/>   <simplelayout axis="x" spacing="10"/><br/>   <text>查询方式</text><br/>   <combobox id="q_type" editable="false" font="宋体" fontsize="14"><br/>    <textlistitem font="宋体" fontsize="14" text="userid"/><br/>    <textlistitem font="宋体" fontsize="14" text="mobile"/><br/>   </combobox><br/>   <text>输入号码</text><br/>   <edittext id="number" width="120" height="22"></edittext><br/>   <button isdefault="true">查 询<br/>    <method event="onclick"><br/>     <![cdata[<br/>      var p = new lzparam();<br/>      debug.write(q_type.getvalue());<br/>      p.addvalue("type",q_type.getvalue());<br/>      p.addvalue("value",number.gettext());<br/>      user.setquerystring(p);<br/>      user.dorequest();<br/>     ]]><br/>    </method><br/>   </button><br/>  </view><br/>  <view x="10" y="70" width="500" height="50"><br/>   <simplelayout axis="x" spacing="10"/>           <br/>   <grid datapath="user:/users/"><br/>    <gridtext datapath="@userid" sortable="true" sortpath="@userid" editable="false" text="用户邦号"/><br/>    <gridtext datapath="@passwd" sortable="true" sortpath="@passwd" editable="false" text="用户密码"/><br/>    <gridtext datapath="@name" sortable="true" sortpath="@name" editable="false" text="昵称"/><br/>    <gridtext datapath="@mob_num" sortable="true" sortpath="@mob_num" editable="false" text="手机号码"/><br/>    <gridtext datapath="@bind" sortable="true" sortpath="@bind" editable="false" text="绑定情况"/><br/>   </grid><br/>   <br/>  </view></code>
<code class='error'> </window></code>
<code class='error'/>
<code class='error'></canvas></code>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-344821-1-1.html 上篇帖子: 在ubuntu9.10/sles11下安装resin并配置开机启动中遭遇的诸多问题 下篇帖子: 使用P6Spy打印Resin执行的SQL语句
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表