Bean标签库
1)Bean标签库中的标签可以访问已经存在的javaBean以及它的属性,还可以定义新的javaBean,把它存放在
指定的范围内。还用于输出国际化信息
2)要使用bean标签库,需要加入
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>标签库
<bean:parameter>标签
A:这个标签主要的功能是用于将请求的参数(get提交与post提交)封装成一个java脚本可以
访问的变量
B:<bean:parameter id="a" name="id"/>
id:要page范围中的变量的名。一般用id表示
name:属性是参数名
上述的代码表示把请求参数名为id的值保存到page范围中变量a中去
比如:
源页面:
< html:link href = "/StrutsTagDemo/parameter_2.jsp?custId=1127"/>
接受页面:
< bean:parameter id = "custId" name = "custId" />
< bean:write name = "custId" />
会输出1127
C:<bean:parameter>相当于一个java脚本
<bean:parameter id = "custId" name = "custId" /> 相当于
<%
String custId=request.getParameter("custId")
%>
而< bean:write name = "custId" /> 相当于
<%
out.print("custid")
%>
D:<bean:parameter id = "custId" name = "custId" />把值取过来之后,完全
可以java脚本进行访问
比如:
<bean:parameter id = "custId" name = "custId" />
<%
custId=custId+"abcd"//直接对custId进行处理
%>
<bean:message key="index.passWord"/>
A:<bean:message>是用在国际化功能中输出国际化消息的
B:<bean:message key="index.passWord"/> 其中的key与国际化资源文件对应
C:实现国际化的步骤:
1)在web应用程序的class文件夹(一定要在此文件夹)下面创建一个resource包字可以随便取)
2)在resource包下面创建两个文件,文件名固定不能修改.
格式形如:键=值
application_en.properties 其中的内容为(代表英文)
==========================================
index.title=On Line NetBook Manager
index.userName=userName
index.passWord=password
index.submit=submit
index.reset=reset
==========================================
application_zh.properties 其中的内容为(代表中文)
index.title=在线图书管理系统
index.userName=用户名
index.passWord=密码
index.submit=提交
index.reset=重置
3)如果是中文为了避免乱码。要通过如下命令进行转换
native2ascii -encoding gb2312 源文件
可直接在cmd模式下,通过拖曳的方法得到中文文件对应的编码
index.title=\u5728\u7ebf\u56fe\u4e66\u7ba1\u7406\u7cfb\u7edf
index.userName=\u7528\u6237\u540d
index.passWord=\u5bc6 \u7801
index.submit=\u63d0 \u4ea4
index.reset=\u91cd \u7f6e复制后直接付盖application_zh.properties
4)配置struts-config.xml文件,在<message-resources>节点下配置属性
<message-resources parameter="resource.application" />
注意这里面的resource表示在class文件夹的resource下面有application
对应的两个中英文资源文件。
5)在jsp页面里面可以通过
<bean:message key="index.passWord"/>来从资源文件里面获取
6)可以在IE里面的工具-->internet选项-->常规--->语言
在里面加入"中文[zh]"与"英文[en]"通过改变顺序会发现jsp页面会自动加载
对应的中英文资源文件
7)如果失败,请注意重新启动tomcat之后, 再试验
8)如果想实现动态中英文转化,可以通过两个超级连接,连到一个action里面
进行处理
<a href="Action.do?en=0">英文</a>
<a href="Action.do?en=1">中文</a>
=======================Actioin代码======================
import org.apache.struts.Globals; //注意导入以下包
import java.util.Locale;
int en=Integer.parseInt(request.getParameter("en"));
if (en==0) {
request.getSession().setAttribute(Globals.LOCALE_KEY,Locale.ENGLISH);
} else {
request.getSession().setAttribute(Globals.LOCALE_KEY,Locale.CHINA);
}
return mapping.findForward("index");
<bean:writer>标签
1)用来输出存放在四种范围内的数据
2)格式:<bean:write name="要输出的四种范围内的变量名"/>
3)可以输出普通的变量
<%
String uid="chen";
equest.setAttribute("uid",uid); //如果不把uid放入request范围内,则bean:write不能输出
%>
<bean:write name="uid"/> 相当于${uid}
4)输出JavaBean的值
格式:bean:write name="已经存放在四种范围内的javabean的变量名"
property="要输出 的JavaBean的属性"/>
<%
worker d=new worker();
d.setId("w1");
d.setName("chan");
request.setAttribute("d",d);
%>
<bean:write name="d" property="name"/> 相当于${d.name}
所以如果要输出javaBean的内容,一般直接用EL就行了.
举例:让用户输入一个工号,检验该工号在不在数据库中,如果在下面的
输入框中显示对应的详细资料。如果没有则输出找不到该职工,如果找到
职工,则可以修改职工内容
==========================jsp页面=========================
${msg} 用来显示出错误
<html:form action="修改职工的Action.do"> //
工号:<html:text property="id" value="${emp.id}"/>
<html:button property="check"
οnclick="window.location='检查是否存在的.do?id='+表单名(会自动成为修改职工
Action对应的ActionForm名).id.value"/>
姓名:<html:text property="name" value="${emp.name}"/><br>
职位:<html:text property="job" value="${emp.job}"/>
html:submit>提交</html:submit><html:reset>重置</html:reset>
</html:form>
=====================检查是否存在的Action========================
int id=Integer.parseInt(request.getParameter("id"));
emp instance=emps.getEmpById(id);
if (instance==null) {
request.setAttribute("msg","<script>alert('找不到该职工')</script>");
不能使用out.print("<script>alert('找不到该职工')</script>")原因是该脚本
为客户端脚本,而mapping.findForward("show")为服务器脚本先于它执行,解决
的方法是把数据传到show.jsp中,再它的页面中提示
}
request.setAttribute("emp", instance);
return mapping.findForward("show");