业界资讯:TextField 的未来

随着需求的增长,AS3中的TextField已无法满足当前的应用需求。为了解决这一问题,Flash 10推出了FTE和TLE两个新的文本组件。FTE提供较低级别的API来减小swf文件的大小,而TLE则增加了更多的排版和文本处理功能,但会增加swf文件的大小。未来可能需要一种新的TextField来平衡这些需求。

在as3 里面TextField 既好用又得到了使用者的认可,但是随着需求的增加,TextField远远不能满足现今的需求增长,而TextField的缺陷一直是一个让人纠葛的病,他不能很好支持html 和css ,在flash 10的时代,推出FTE 和TLF,其中前者能够很好解决TextField 遗留的问题,推出更低级别的API 有利于减少swf 的大小,但是构建的速度和效率花费的成本不是工程师们所追求的,而TLE的出现增加更多排版的功能和文本处理解决了TextField的问题还增加更多支持,但是不好的地方就是增加swf的大小,同样是所花费学习成本也很大。因此解决这两者的问题就是需要在未来推出一个新的TextField 取代旧的TextField,这样以适应一个新时代的到来。

探讨的来自的声音可以参考这里工程师的文章

http://www.bytearray.org/

<think>我们正在讨论的是Struts框架(具体是Struts 1还是Struts 2?)。根据用户的问题,他提到了`s:textfield`标签,这是Struts 2的标签,因为Struts 1的标签库前缀通常是`html:`(如`<html:text>`)。同时,用户引用的内容也是关于Struts2的(使用了`ActionContext`和`#request`等)。因此,我们按照Struts 2来回答。 在Struts 2中,前端JSP页面使用Struts2标签库,特别是`s:textfield`标签,来获取后端Bean的值。 ### 步骤: 1. **确保Bean值在值栈(ValueStack)或某个作用域中可用**:在Struts2中,通常将数据存储在值栈(Action的属性)或请求(request)、会话(session)等作用域中。值栈中的属性可以直接通过属性名访问,而其他作用域中的属性则需要使用`#`前缀(如`#request`、`#session`)。 2. **在JSP页面中使用Struts2标签**:使用`s:textfield`标签,通过设置`name`属性(用于提交表单时的参数名)和`value`属性(用于显示的值)来绑定数据。 ### 示例: 假设我们有一个User类: ```java public class User { private String username; private String password; // 省略getter和setter } ``` 在Action类中,我们有一个User对象(作为属性并提供getter): ```java public class UserAction extends ActionSupport { private User user; // 这个对象会被Struts2自动放入值栈 // 假设在某个方法中,我们设置user的值 public String execute() { user = new User(); user.setUsername("zhongfucheng"); user.setPassword("123"); return SUCCESS; } // 必须提供getter public User getUser() { return user; } } ``` 在JSP页面中,我们可以这样使用: ```jsp <%@ taglib prefix="s" uri="/struts-tags" %> <s:form action="submitUser"> <!-- 使用name="user.username"绑定到Action中的user对象的username属性 --> <s:textfield label="用户名" name="user.username" value="%{user.username}"/> <!-- 或者省略value,因为name属性已经指定了,Struts2会自动从值栈中取值 --> <s:textfield label="用户名" name="user.username"/> <s:password label="密码" name="user.password"/> <s:submit value="提交"/> </s:form> ``` ### 说明: - `name`属性:用于指定表单字段的名称,当表单提交时,Struts2会尝试将值设置到Action中对应的属性(通过setter方法)。同时,在页面显示时,Struts2会自动从值栈中查找该属性的当前值来填充输入框。 - `value`属性:可以显式指定,通常使用OGNL表达式(如`%{user.username}`)来获取值。但是,如果省略`value`属性,`s:textfield`标签会自动根据`name`属性去值栈中查找并显示对应的值。所以,通常我们只需要写`name`属性即可。 - 如果数据不在值栈中,而是在其他作用域(如request、session),则可以使用`#`前缀。例如,如果我们在request中存储了一个属性`username`,则可以使用: ```jsp <s:textfield name="username" value="%{#request.username}"/> ``` ### 数据回显: 在用户提交表单后,如果验证失败需要回到表单页面并显示之前输入的值,我们通常不需要做额外操作,因为Struts2会自动将提交的参数值回显到对应的输入框中(通过`name`属性匹配)。当然,前提是Action中对应的属性有getter方法,并且值栈中有这些值。 ### 引用用户提供的参考: 用户提供的引用[^1]中,展示了将数据放到request域中,然后在JSP页面使用`#request`来获取: ```jsp <s:textfield label="用户名" name="user.username" value="%{#request.username}"/> ``` 这种方式也是可行的,但通常更推荐将数据放在Action的属性中(即值栈中),这样可以直接通过属性名访问,而不需要加前缀。 ### 总结: 在Struts2中,使用`s:textfield`标签获取Bean的值: 1. 确保Bean在值栈中(通常是Action的属性)或者在其他作用域(如request、session)中。 2. 在标签中,设置`name`属性为对应的属性路径(如`user.username`),这样在提交时能正确设置值,在显示时也能自动回显值。 3. 如果需要显式指定值,可以使用`value`属性配合OGNL表达式(如`%{user.username}`或`%{#request.username}`),但通常省略`value`即可。 §§相关问题§§ 1. 在Struts2中如何将数据存储到request作用域? 2. Struts2的OGNL表达式有哪些常用用法? 3. 如何自定义Struts2的表单标签样式? 4. Struts2中如何实现表单验证?</think>在 Struts 2 框架中,使用 `<s:textfield>` 标签获取后端 Bean 的值主要通过 OGNL 表达式实现。以下是详细步骤和示例: ### 核心实现步骤 1. **将 Bean 放入值栈(ValueStack)** Struts 2 的值栈是数据访问的核心。在 Action 类中将 Bean 存入值栈: ```java public class UserAction extends ActionSupport { private User user; // Bean 对象 public String execute() { // 创建 Bean 并设置值(模拟从数据库获取) user = new User(); user.setUsername("zhongfucheng"); user.setPassword("123"); return SUCCESS; } // 必须提供 getter 方法 public User getUser() { return user; } } ``` 2. **在 JSP 中使用 `<s:textfield>` 获取值** 通过 OGNL 表达式直接访问 Bean 属性: ```jsp <%@ taglib prefix="s" uri="/struts-tags" %> <s:form> <!-- 方式1:直接通过属性链访问 --> <s:textfield label="用户名" name="user.username" value="%{user.username}"/> <!-- 方式2:省略 value 属性(自动回显) --> <s:textfield label="密码" name="user.password"/> </s:form> ``` ### 关键机制说明 1. **OGNL 表达式** - `%{user.username}` 是 OGNL 表达式,从值栈的 `User` 对象获取 `username` 属性 - `name="user.username"` 实现双向绑定(提交时自动填充到 Action 的 Bean) 2. **值栈(ValueStack)** Struts 2 自动将 Action 对象及其属性放入值栈,JSP 标签可直接访问: ``` 值栈结构: |-- Action 对象 (UserAction) | |-- user (User 实例) | |-- username = "zhongfucheng" | |-- password = "123" ``` 3. **作用域数据访问** 若 Bean 不在值栈中(如存储在 request 作用域): ```java // 在 Action 中 public String execute() { request.put("myUser", user); // 存入 request return SUCCESS; } ``` ```jsp <!-- JSP 中通过 # 前缀访问 --> <s:textfield value="%{#request.myUser.username}"/> ``` ### 完整示例 **Action 类**: ```java public class UserAction extends ActionSupport { private User user; public String execute() { user = new User(); user.setUsername("admin"); user.setEmail("contact@example.com"); return SUCCESS; } public User getUser() { return user; } } ``` **JSP 页面**: ```jsp <s:form action="updateUser"> <!-- 自动绑定到 user.username --> <s:textfield label="用户名" name="user.username"/> <!-- 显式指定值 --> <s:textfield label="邮箱" value="%{user.email}"/> <s:submit value="保存"/> </s:form> ``` ### 效果说明 - 页面加载时:自动显示 Bean 的值(如 `admin`) - 表单提交时:用户输入的值会自动填充到 Action 的 `user` 对象中 - 数据回显:表单验证失败时自动显示用户上次输入的值 ### 注意事项 1. **Getter 必须存在** 值栈通过 `getUser().getUsername()` 访问值,缺少 getter 会导致取值失败 2. **OGNL 表达式语法** - `%{...}` 表示启用 OGNL 解析 - 访问 Action 属性直接写属性名(如 `username`) - 访问其他作用域加前缀(如 `#request.attr`) 3. **数据回显优先级** 当表单提交失败时: ``` 显示顺序:用户输入值 > Action 中的值 > Bean 初始值 ``` 4. **复杂属性访问** 支持嵌套属性(如 `%{user.address.city}`)[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值