struts标签

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>







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值