1.<html:form>
错误一
<html:form>标签中action没有配置出现的异常
javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot retrieve mapping for action: "/"
解决方法:
在<html:form>中配置action="TestAction.do"
错误二
javax.servlet.jsp.JspException: Form bean not specified on mapping for action: "TestAction.do"
解决方法:
在struts-config.xml的Action标签中配置
<action path="/TestAction" name="TestForm" scope="request"></action>
增加form-bean的配置
<form-beans>
<form-bean name="TestForm" type="com.xxc.form.TestForm"></form-bean>
</form-beans>
jsp页面的源代码
<html:form action="TestAction.do" method="post"></html:form>
转化后的代码<form name="TestForm" method="post" action="/struts_day2/TestAction.do"></form>
注意:* html:form标签没有name属性
* html:form标签的action属性不能为空,必须在struts-config.xml文件中有对应的配置,否则jsp运行出现错误一
* 在struts-config.xml文件中必须配置name属性和对应的form-bean否则出现错误二
* html:form被标签处理类解析后.会转化为form标签,同时增加name属性,name属性的值是struts-config.xml中
<action path="/empAction" name="empForm1" scope="request">中name属性的值
* html:form这是一个表单标签,该标签内必须要有输入组件
类似于 用户名:<input type="text" name="username" value="xxxx"><br>这样类型的组件,所以必须有ActionForm来
封装jsp页面表单中组件的值--所以用<html:from>时会检查上面两个出现错误的原因
2.<html:text>
用户名:<html:text property="userName"></html:text>
在使用此标签时,必须在对应的ActionForm有相同名称的属性存在,而且必须存在get和set方法这个标签必须在<html:form>中使用,在获取ActionForm的值的时候,会去找<html:form>标签中name属性对应的ActionForm,然后调用get方法。<html:text>的name属性默认是<html:from>中name的属性。
<body>
<%Person p = new Person("xxc");
pageContext.setAttribute("p", p, pageContext.REQUEST_SCOPE);
%>
<html:form action="/testAction" method="post">
用户名:<html:text name="p" property="userName"></html:text>
</html:form>
</body>
如果获取某个特定的某个domain的某个属性,则需要在<html:text>标明name属性。<action-mappings>
<action path="/testAction" type="com.xxc.action.TestAction" name="TestForm" scope="request"></action><!--scope属性默认是session,共两个值request,session-->
</action-mappings>
当scope设置为session时,第一次请求form表单的时候,ActionForm会一次执行构造,reset,get方法,后面再次请求只会执行reset和get方法。
当scope设置为request时,每次请求都会执行构造,reset,get方法。
3.<html:link>相当于<a>
<%
String usernamexxxx="zhang";
pageContext.setAttribute("username",usernamexxxx);
%>
<!--
<a href="/itcast0826StrutsTaglib/welcome.do?name=zhang">action属性</a>
paramId="name" :表示传递的参数的名称
paramName="username"
如果username(作用域的key) 指向的不是一个javaBean,而是一个普通的值,可以单独使用paramName
如果username(作用域的key) 指向的是一个javaBean,而不是是一个普通的值,不嫩单独使用paramName
-->
<!-- <a href="/itcast0826StrutsTaglib/welcome.do?name=zhang">action属性</a>-->
<html:link action="welcome.do" paramId="name" paramName="username"> action属性</html:link><br><br><br>
forward属性:链接到一个global forward上;<br>
<!-- <a href="/itcast0826StrutsTaglib/welcome.jsp?name=zhang">forward属性</a> -->
<html:link forward="welcome" paramId="name" paramName="username"> forward属性</html:link> <br><br><br>
href属性:这个链接会转发给控制器,由控制器做决定;<br>
<!-- <a href="welcome.do?name=zhang">href属性</a> -->
<html:link href="welcome.do" paramId="name" paramName="username">href属性</html:link><br><br><br>
page属性:一个相对的链接。<br>
<!--<a href="/itcast0826StrutsTaglib/welcome.jsp?name=zhang">page属性</a>-->
<html:link page="/welcome.jsp" paramId="name" paramName="username">page属性</html:link><br><br><br>
<%
Person person=new Person();
person.setUsername("tonggang");
pageContext.setAttribute("p",person);
%>
<!--
<a href="/itcast0826StrutsTaglib/welcome.do?name=zhang">action属性</a>
paramId="name" :表示传递的参数的名称
paramName="username"
如果username(作用域的key) 指向的不是一个javaBean,而是一个普通的值,可以单独使用paramName
如果username(作用域的key) 指向的是一个javaBean,而不是是一个普通的值,不嫩单独使用paramName
* 结合paramProperty使用
* paramName:指定的作用域中key 该key指向的值是一个javaBean
* paramProperty:javaBean中的属性
-->
<!--<a href="/itcast0826StrutsTaglib/welcome.do?name=tonggang">action属性</a>-->
<html:link action="welcome.do" paramId="name" paramName="p" paramProperty="username"> action属性</html:link><br><br><br>
forward属性:链接到一个global forward上;<br>
<!-- <a href="/itcast0826StrutsTaglib/welcome.jsp?name=tonggang">forward属性</a> -->
<html:link forward="welcome" paramId="name" paramName="p" paramProperty="username"> forward属性</html:link> <br><br><br>
href属性:这个链接会转发给控制器,由控制器做决定;<br>
<!-- <a href="welcome.do?name=tonggang">href属性</a>-->
<html:link href="welcome.do" paramId="name" paramName="p" paramProperty="username">href属性</html:link><br><br><br>
page属性:一个相对的链接。<br>
<!-- <a href="/itcast0826StrutsTaglib/welcome.jsp?name=tonggang">page属性</a>-->
<html:link page="/welcome.jsp" paramId="name" paramName="p" paramProperty="username">page属性</html:link><br><br><br>
3.<html:img>和<html:image>
<body>
<!-- 源码是<input type="image" name="" src="/tomcat.gif">-->
<html:image src="/tomcat.gif"></html:image><!--这里没action属性-->
<!-- 源码是
<img src="/tomcat.gif">
<img src="/struts_day2/tom.do">
-->
<html:img src="/tomcat.gif"/>
<html:img action="/tom.do"></html:img><!--用src跳到.do上不带项目名-->
</body>
4.<html:options>:(在这个标签中遍历的list集合中存储的元素必须是javaBean类型的)
<body>
<html:form action="/check.do" method="post">
<!--
html:options collection="list" property="eduid" labelProperty="eduname"
* collection表示遍历的集合,该集合中存放的是javaBean --Edu(eduid,eduname)
* property="eduid" 表示该javaBean中的属性,转化后的值是 <option value="1">标签中value=1
* labelProperty="eduname" 表示该javaBean中的属性,转化后的值是 <option value="1">大专</option>的"大专"的值(文本值)
<option value="1">大专</option>
-->
<%
Edu edu1 = new Edu();
edu1.setEduId("1");
edu1.setEduName("小学");
Edu edu2 = new Edu();
edu2.setEduId("2");
edu2.setEduName("初中");
Edu edu3 = new Edu();
edu3.setEduId("3");
edu3.setEduName("高中");
List<Edu> list = new ArrayList<Edu>();
list.add(edu1);
list.add(edu2);
list.add(edu3);
request.setAttribute("list", list);
%>
<html:select property="eduName">
<html:options collection="list" property="eduId" labelProperty="eduName"/>
</html:select>
</html:form>
</body>
转换后的代码
<select name="eduName">
<option value="1">小学</option>
<option value="2">初中</option>
<option value="3">高中</option>
</select>
4.<html:multibox>:
<body>
<%
String[] love = {"魔兽","跑跑","传奇"};
request.setAttribute("hobby", love);
%>
<html:form action="/checkBox.do" method="post">
<c:forEach items="${hobby}" var="love">
<html:multibox property="hobby"><!-- 这个hobby在对应的ActionForm里需要有对应属性,因为要将选择的值封装数据到actionForm里 -->
${love}<!--这个是checkBox的value属性-->
</html:multibox>
${love}<!--这个是文本值-->
</c:forEach>
</html:form>
</body>
<form name="check" method="post" action="/struts_day2/checkBox.do">
<input type="checkbox" name="hobby" value="魔兽">
魔兽
<input type="checkbox" name="hobby" value="跑跑">
跑跑
<input type="checkbox" name="hobby" value="传奇">
传奇
</form>