15.1 Struts1.x标签库
分为html,bean,logic,nested和tiles标签
15.1.1 html标签库
tag.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<title>JSP for TagForm form</title>
</head>
<body>
<html:form action="/tag">
选择框:
<html:checkbox property="checkbox" value="体育">体育</html:checkbox>
<html:checkbox property="checkbox" value="音乐">音乐</html:checkbox>
<html:checkbox property="checkbox" value="影视">影视</html:checkbox>
<br />
文件域:
<html:file property="file"></html:file>
<br />
隐藏域:
<html:hidden property="hidden"/>
<br />
多选框:
<html:multibox property="multibox" value="选项一">选项一</html:multibox>
<html:multibox property="multibox" value="选项二">选项二</html:multibox>
<br />
密码域:
<html:password property="password"></html:password>
<br />
单选框:
<html:radio property="radio" value="男">男</html:radio>
<html:radio property="radio" value="女">女</html:radio>
<br />
下拉框:
<html:select property="select">
<html:option value="选项一">选项一</html:option>
<html:option value="选项二">选项二</html:option>
</html:select>
<br />
输入框:
<html:text property="text"></html:text>
<br />
文本框:
<html:textarea property="textarea"></html:textarea>
<br />
图片按钮:
<html:image src="images/submit.gif"></html:image>
<br />
普通按钮:
<html:button property="button" value="普通按钮"></html:button>
<br />
提交按钮:
<html:submit></html:submit>
<br />
重置按钮:
<html:reset></html:reset>
<br />
使用list内容显示下拉框:
<%--<html:select property="select">
<html:options collection="personList" property="id" labelProperty="name"/>
</html:select>
--%></html:form>
</body>
</html>
TagForm.java
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.uikoo9.form;
import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;
/**
* MyEclipse Struts
* Creation date: 01-06-2013
*
* XDoclet definition:
* @struts.form name="tagForm"
*/
@SuppressWarnings("serial")
public class TagForm extends ActionForm {
public String getCheckbox() {
return checkbox;
}
public void setCheckbox(String checkbox) {
this.checkbox = checkbox;
}
public FormFile getFile() {
return file;
}
public void setFile(FormFile file) {
this.file = file;
}
public String getHidden() {
return hidden;
}
public void setHidden(String hidden) {
this.hidden = hidden;
}
public String[] getMultibox() {
return multibox;
}
public void setMultibox(String[] multibox) {
this.multibox = multibox;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRadio() {
return radio;
}
public void setRadio(String radio) {
this.radio = radio;
}
public String getSelect() {
return select;
}
public void setSelect(String select) {
this.select = select;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getTextarea() {
return textarea;
}
public void setTextarea(String textarea) {
this.textarea = textarea;
}
private String checkbox;
private FormFile file;
private String hidden;
private String[] multibox;
private String password;
private String radio;
private String select;
private String text;
private String textarea;
}
TagAction.java
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.uikoo9.action;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.uikoo9.form.TagForm;
/**
* MyEclipse Struts
* Creation date: 01-06-2013
*
* XDoclet definition:
* @struts.action path="/tag" name="tagForm" input="/form/tag.jsp" scope="request" validate="true"
*/
public class TagAction extends Action {
/*
* Generated Methods
*/
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
TagForm tagForm = (TagForm) form;// TODO Auto-generated method stub
tagForm.setCheckbox("音乐");
tagForm.setMultibox(new String[]{"选项一","选项二"});
tagForm.setHidden("隐藏的文本域");
tagForm.setPassword("这里是密码");
tagForm.setRadio("女");
tagForm.setSelect("选项二");
tagForm.setText("这里是文本域");
tagForm.setTextarea("这里是一段文本");
List<String> personList = new ArrayList<String>();
personList.add("person1");
personList.add("person2");
personList.add("person3");
personList.add("person4");
request.setAttribute("personList", personList);
return mapping.getInputForward();
}
}
15.1.2 bean标签库
beanTag.jsp
<%@page import="com.uikoo9.model.Person"%>
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<html>
<head>
<title>JSP for TagForm form</title>
</head>
<body>
<%
Person person = new Person();
person.setName("qiao");
person.setAge(11);
request.setAttribute("person", person);
%>
<bean:write name="person" property="name"/>
<bean:write name="person" property="age"/>
</body>
</html>
<bean:cookie>,<bean:parameter>,<bean:header>用来获得相应的变量
<bean:message>用来显示资源国际化信息
<bean:resource>可以获取本地Web程序内的资源
<bean:struts>用来获取struts的配置
<bean:include>可以讲一个外部文件包含进来
<bean:size>可以获取集合对象的长度
15.1.3 logic标签库
<logic:present>,<logic:notPresent>判断对象是否存在
<logic:empty>,<logic:notEmpty>判断集合是否为空
<logic:equal>,<logic:notEqual>判断对象是否相等
15.1.4 nested标签库
一般流程:从form中取出值来,然后添加到某个对象中
nested标签可以省略这一步
NestedForm.java
package com.uikoo9.form;
import org.apache.struts.action.ActionForm;
import com.uikoo9.model.Person;
@SuppressWarnings("serial")
public class NestedForm extends ActionForm {
private String action;
private Person person = new Person();
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
nested.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested"%>
<html>
<head>
<title>JSP for TagForm form</title>
</head>
<body>
<html:form action="/tile">
action:<html:text property="action"></html:text><br>
姓名:<nested:text property="person.name"></nested:text><br>
年龄:<nested:text property="person.age"></nested:text><br>
<html:submit></html:submit>
</html:form>
</body>
</html>
NestedAction.java
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.uikoo9.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.uikoo9.form.NestedForm;
import com.uikoo9.model.Person;
/**
* MyEclipse Struts
* Creation date: 01-06-2013
*
* XDoclet definition:
* @struts.action path="/tag" name="tagForm" input="/form/tag.jsp" scope="request" validate="true"
*/
public class NestedAction extends Action {
/*
* Generated Methods
*/
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
@SuppressWarnings("unused")
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
NestedForm tileForm = (NestedForm)form;
if("add".equals(tileForm.getAction())){
Person person = tileForm.getPerson();
//数据库操作。。。
return mapping.findForward("success");
}
return mapping.getInputForward();
}
}
15.1.5 tiles标签库
暂时略过
15.2 DispatchAction
15.2.1 利用Action参数分发
15.2.2 DispatchAction
DispatchAction.java
package com.uikoo9.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
public class DispatchTestAction extends DispatchAction {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stub
return super.execute(mapping, form, request, response);
}
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response){
System.out.println("执行了add方法");
return null;
}
public ActionForward list(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response){
System.out.println("执行了list方法");
return null;
}
}
struts-config.xml中配置:
<action
attribute="dispatchForm"
input="/form/dispatch.jsp"
name="dispatchForm"
parameter="action"
path="/dispatch"
scope="request"
type="com.uikoo9.action.DispatchAction"/>
其中parameter是判断的依据
15.3 上传文件
15.3.1 FormFile类型
表单需要指定enctype
15.3.2 保存FormFile
FormFile提供getInputStream()接口
15.4 Validator自动校验数据
15.4.1 支持自动校验的ValidatorForm
继承这个类就可以了
15.4.2 Validate规则配置
配置validation.xml文件
15.4.3 错误信息配置
配置properties文件
15.4.4 配置到struts-config.xml文件
15.4.5 配置客户端JavaScript校验
15.5 动态属性Form Bean
15.5.1 动态属性表单DynaActionForm
15.5.2 Action中获取动态属性
15.5.3 JSP中使用动态属性
15.6 异常处理
15.6.1 异常捕捉ExceptionHandler
15.6.2 配置ExceptionHandler
15.7 struts-config.xml中使用通配符
15.8 本章小结