38.使用标签-基础表单标签

转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html

1.基础表单标签

准备工作:建立struts2tag项目,搭建好struts2的开发环境。在html我们常用的基础表单标签主要有文本域、密码域、提交、重置四种。它们在strust2中可以通过标签来生成。下面建立login.jsp页面,与这四种标签相关的内容如下:

<%@ page language="java"  pageEncoding="utf-8"%>

<%@ taglib uri="/struts-tags" prefix="s" %>

<html>

  <body>

       <s:form action="login" method="post" namespace="/my">

              <s:textfield label="用户名" name="user.username" required="true" requiredposition="right"/>

<s:password label="密码" name="user.password" required="true" />     
<s:reset value="重置" align="left"/>
<s:submit value="注册" align="left"/>

       </s:form>

  </body>

</html>

说明:label中的内容是显示在表单前的提示内容,required设为true,表示此表单项为必填内容。

2.单选按钮和复选框:

<s:radio list="#{1:'男',0:'女'}"  value="1"  label="性别" name="user.sex"/>
<s:checkboxlist list="#{1:'足球',2:'排球',3:'蓝球',4:'网球'}" name="user.love" label="爱好"/>

3.三种方式实现下拉列表

<s:bean id="p" name="com.asm.NativePlaceFormAction"></s:bean>

<s:bean name="com.asm.NativePlaceMapFormAction" id="pMap"></s:bean>

<s:bean name="com.asm.NativePlaceProFormAction" id="pp"></s:bean>

<s:select list="#p.place" label="籍贯" name="user.place"/>

<s:select list="#pMap.place" label="籍贯2" name="user.place"/>

<s:select list="#pp.place" listKey="pId" listValue="pName" label="籍贯3" name="user.place" headerKey="-1" headerValue="---省---" emptyOption="true"/>

说明:三种方式实现下拉列表分别对应了三个java类,这三个类的内容为:
NativePlaceFormAction主要代码为:
package com.asm;

public class NativePlaceFormAction extends ActionSupport {

       private List<String> place;      

       public NativePlaceFormAction(){

              place=new ArrayList<String>();

              place.add("山东省");

              place.add("山西省");

              place.add("河南省");

              place.add("河北省");

              place.add("四川省");

              place.add("云南省");

       }

       ...省略place的get/set方法

}

NativePlaceMapFormAction主要代码为:
package com.asm;

public class NativePlaceMapFormAction extends ActionSupport {

       private Map<Integer, String> place;

 

       public NativePlaceMapFormAction() {

              place = new HashMap<Integer, String>();

              place.put(1, "山东省");

              place.put(2, "山西省");

              place.put(3, "河南省");

              place.put(4, "河北省");

              place.put(5, "四川省");

              place.put(6, "云南省");

       }
       ...省略place的get/set方法

}
NativePlaceProFormAction主要代码为:
package com.asm;
public class NativePlaceProFormAction extends ActionSupport {

private List<Object> place;     

       public NativePlaceProFormAction(){

              place=new ArrayList<Object>();

              new Province(1,"山东省","济南");

              place.add(new Province(1,"山东省","济南"));

              place.add(new Province(2,"山西省","太原"));

              place.add(new Province(3,"河南省","郑洲"));

              place.add(new Province(4,"河北","石家庄"));

              place.add(new Province(5,"四川","成都"));

              place.add(new Province(6,"云南","昆明"));

       }

       ...省略place的get/set方法

}

说明:此三种实现效果一样,但是在它们提交时传递给服务器的参数不同,具体可以参看login.jsp页面的源码。另外,这三种实现其实都依赖了<s:bean>设定的对象,如果我们不希望依赖<s:bean>来设定,可以通过配置action来实现:下面我们以NativePlaceFormAction说明:首先在struts.xml中配置此action,配置内容如下:
<action name="npf" class="com.asm.NativePlaceFormAction">

                     <result>/login2.jsp</result>

</action>
随后,我们在login.jsp中增加如下内容:
       <a href="<%=request.getContextPath()%>/my/npf.action">另一个注册页面</a>
其中login2.jsp中的关键内容为:
              <s:select list="place" label="籍贯" name="user.place"/>

我们可以发现:在login2.jsp中填写list的值时并没有用ognl表达式,因为我们通过npf.action来访问时,此Action已经被写入到了值栈中,所以我们可以直接引用。 后面所用到的实例,我们都会把这样的类做成Action,这样如果我们想通过这种方式访问便只需要在struts.xml中配置即可

原文地址:https://www.cnblogs.com/sharpest/p/5587934.html