加载中…
个人资料
我的
我的
  • 博客等级:
  • 博客积分:0
  • 博客访问:37,401
  • 关注人气:2
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
分类
访客
加载中…
博文
应用的数据一方面显示给用户看,另一方面需要保存到数据库中。而这两个用途数据的表现形式可能不同。
举例来说:
1,用户看到的性别是“男”,而数据库中存储的是“0”--这种类型的数据属于代码数据;
2,用户看到的数量是“1,214,235.30”,而数据库中存储的是“1214235.3”--这种类型的数据属于格式上的控制,可能与本地化有关。

对于以上关于数据显示和存储的差异Tapestry是如何设计与解决的呢?请接着往下看...

一、数据显示的格式化
1,输入域
用户可以输入数据的组件,如:TextField。
需要设置translator属性,如果是代码数据的转换则继承于AbstractTranslator,如果是数据格式的转换则继承于FormatTranslator。

如果是继承于AbstractTranslator,则需要实现formatObject方法和parseText方法.
其中formatObject方法是为了显示而进行的转换,它是将对象转换为字符串,因为客户端显示的都是字符串;
parseText方法是为了存储以及后台处理而进行的转换,它是将字符串转换为对象,因为后台处理的都是对象。

2,输出域
用户不可以输入
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
Tapestry的每个page需要将引用的图片或CSS写入配置中,比较麻烦,本文提供了一种统一管理各种资源的做法。

一、图片和CSS资源
1,在自定义的ApplicationServlet的init方法中初始化各图片资源:
String path = config.getServletContext().getResource('/').getPath();             path = path.substring(path.indexOf('/') + 1);             path = path.substring(path.indexOf('/'));             GlobalAssets.init(path);


2,在GlobalAssets中:
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
用途:web应用部署并运行于外部(区别于eclipse环境中启动的)应用服务器中,当出现问题时,可以使用eclipse工程的源代码进行跟踪调试。
这样就不需要任何插件(MyEclipse等)就可以实现跟踪调试了!
  • Tomcat
1.修改catalina.bat(5.0以上版本需要修改catalina.50.bat)
goto setArgs
:doneSetArgs
rem 以下为增加的代码,端口为8000
SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000;%CATALINA_OPTS%

2.在eclipse中 Run/Debug.../Remote Java Application/New/,选择要进行调试的工程,Host为运行web应用的服务器地址,Port为端口(8000)
3.启动应用服务器Tomcat
4.Run/Debug.../Remote Java Application/,选择刚才新建的配置,点击Debug按钮即可。
  • WebLogic
1.修改startWebLogic.cmd
set JAVA_OPTIONS=-Xdebug -Xnoagent -Djava.comp
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
JSP在初次访问时一般都要进行编译,生成class文件或java文件,这个过程会比较慢,所有可能影响访问效率。本文提供了一个脚本,可将Web应用的所有jsp文件进行预编译,部署到weblogic上之后就不需要再次编译了,可以提高运行期JSP的访问性能。
具体操作步骤如下:
@echo off
rem 指定weblogic的类库文件
set CLASSPATH=.\weblogic.jar;.\webservices.jar
rem 指定需要JSP预编译的web应用根目录
set WEBROOT=D:\MyWeb\WebRoot

rem 设置所依赖的jar文件入类路径中
for /R %WEBROOT%\WEB-INF\lib %%j IN (*.jar) do call setclasspath %%j

rem 递归编译应用下所有目录及子目录的JSP文件,编译后的文件在classes/jsp_servlet目录下
for /R %WEBROOT%\  %%f IN (*.jsp) do java weblogic.jspc -webapp %WEBROOT% -compiler javac -forceGeneration -classpath %CLASSPATH% -d %WEBROOT%\WEB-INF\classes -k -keepgenerated %%f
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
本文对web应用的数据校验进行分类。
1,前端校验后端校验
web应用程序前端为HTML页面,后端是各种动态程序(JSP/Servlet,ASP,PHP等)。数据校验可放置在前端(javascript),也可以放置到后端(服务器端程序)。
2,声明式校验编程式校验
这是根据校验代码编写的方式进行划分的,提供一些通用的校验规则,然后组合这些基本的校验规则写入配置文件中,这种方法是生命式校验,而将校验以代码的形式写入程序中则为编程式校验。具体开发中,声明式校验可以满足大多数的校验需求,而对于复杂的校验还是需要编程进行实现的。
3,表单级校验提交级校验
根据校验作用范围的不同可分为以上两类,前者是所有的提交按钮都使用表单级校验,而提交级校验仅仅应用于某个提交按钮。本人认为这种分类没
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
1,Body.java:
protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) {
        TapestryUtils.storePageRenderSupport(cycle, this);

        this.addExternalScript(TapestryUtil.getResource(
          '/com/web/tapestry/html/Body.js',cycle));

        IMarkupWriter nested = writer.getNestedWriter();

        renderBody(nested, cycle);

        // Start the body tag.
        writer.println();
        writer.begin(ge
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
浏览器的两个默认处理
1,当表单存在多个提交按钮,用户按下回车键,浏览器默认是提交左上角那个按钮;
2,如果在javascript中document.forms[0].submit()则同样提交表单,但不传递任何提交按钮的信息。

用户可能会要求设置一个默认提交按钮,而不是浏览器默认的动作。如果用户在页面上按回车键,则相当于点击其中一个提交按钮。

本文提供了解决回车键提交问题(兼容Firefox和IE)的办法。

1,首先提供了javascript代码,Script类;
public static String getDefaultSubmitScript(String submitName) {
        StringBuffer buffer = new StringBuffer();

        buffer.append('addEventListener(');
        buffer.append('\'document\',');
  &
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
Required的修改遇到麻烦事,因为BaseValidator有一个方法isRequired,这样增加一个属性required的getter和 setter,page文件中设置required=searchId时,总是去匹配isRequired方法,这样出现字符串转换为布尔型错误。
为了对其它校验器不产生影响,我增加了一个校验器Required2,配置时required2=searchId。
同时,required类型的校验器本来不需要参数,所以现在参数值就是提交按钮的ID,因而可以使用BaseValidator的submitName属性。代码如下:
public class Required2 extends BaseValidator {

    public String getRequired2() {
        return this.getSubmitName();
    }

    public void setRequired2(String required) {
        this.setSubmitName(required);
    }
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
1,BaseValidator的修改非常简单,增加了一个submitName属性及其getter和setter。用于保存校验器适用的提交按钮的ID。
// whether skip this validator
    public boolean isSkipValid(IFormComponent field) {
        IPage page = field.getPage();
        return (page instanceof XtradeBasePage && this.getSubmitName() != null && !this
                .getSubmitName()
                .equals(((XtradeBasePage) page).getSubmitName()));
    }

    // whether form range's validator
    public boolean isFormValid() {
        return this.getS
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
上篇文章的做法,不需要修改tapestry框架,但是前端javascript的校验功能丢失了。可以满足只需要后端校验的需要。
本文对“配置一次,前后都用”的理想模式进行实现,经测试表明成功了!

1,需要修改以下几个类和文件:
Body.java
Form.java
AbstractSubmit.java
Submit.java
ImageSubmit.java
Submit.jwc
ImageSubmit.jwc

BaseValidator.java
MinLength.java
......

2,增加BasePage的子类:
SubBasePage.java,其中增加一属性submitName,保存提交组件的名字,用以各validator根据提交组件的名字决定是否需要进行校验。

3,page中对各个输入组件配置validators时也发生了变化:
如,minLength=12 --->>> minLength=OneSubmit_12
表示当点击名字为OneSubmit提交组件的时候,需要校验该输入

组件的值的长度至少为12。

4,其它Validator都需要作相应的修改。
目前只完成了MinLength和MaxLength的修改和测试。

结论:这样修改以后校验规则还是在page中进行配置。客户端javascript校验和后台校验两
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有