转:https://blog.csdn.net/damogu_arthur/article/details/46907667
ui标签:用在jsp页面用于回显数据的标签,这些标签是由框架定义的,用来替代原生的标签!
ui标签有:
<s:textfield name="xxx"></s:textfield>
<s:password name="xxx" showPassword="trus"></s:password>
<s:select name="xxx" list="xx" listKey=.. listValue=.. headerValue=..><s/select>
<s:checkboxlist list= "#pList" name="pid" listKey="pid" listValue="pname" ></s:checkboxlist>
需要回显的数据要放在valueStack中,可以放在map栈中,也可以放在对象栈中;
放对象栈中有两种情况:
一是将数据封装成bean,将bean放在对象栈中;
二是给action设置属性,action的属性就在对象栈中;
1.Action中放入数据:
public class UIAction extends ActionSupport{
private String username;
private String password;
public String getUsername() {
return username ;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password ;
}
public void setPassword(String password) {
this.password = password;
}
/**
* 1.在表单中回显数据:数据位于对象栈中,直接根据表单元素的name数据就可以回显!
* 用户名:<s:textfield name="username"></s:textfield><br/>
密码:<s:password name="password" showPassword="true"></s:password><br/>
* @return
*/
public String showDataFromObjStack(){
User user = new User();
user.setPassword( "aaa");
user.setUsername( "bbb");
ActionContext. getContext().getValueStack().push(user);
return "user_objstack" ;
}
/**
* 从map栈中回显数据,s:textfield的value属性不能直接跟 ognl表达式,所以需要加%{ ognl表达式}
*
* 用户名:<s:textfield name=" username" value="%{#user.username}"></s:textfield><br/>
密码: <s:password name="password" showPassword="true" value="%{#user.password}"></s:password><br/>
* @return
*
*/
public String showDataFromMap(){
User user = new User();
user.setPassword( "111");
user.setUsername( "zhangsan");
ActionContext. getContext().put("user", user);
return "user_map" ;
}
/**
* Action中的属性位于对象栈中,在回显时可以直接使用value来回显:
* 用户名:<s:textfield name="username"></s:textfield><br/>
密码: <s:password name="password" showPassword="true" ></s:password><br/>
* @return
*/
public String showDataFromActionProperty(){
this.username = "lisi" ;
this.password = "asfd" ;
return "user_actionproperty" ;
}
/**
* 使用s:select标签来显示下拉选择框,必须有list属性;
* jsp:选择省份:<s:select name=" pid" list="#pList" listKey="pid" listValue="pname" headerKey="" headerValue="请选择省份"></s:select> <br/>
* 翻译后的代码:
* 选择省份:
<select id="uiAction_form_action_pid" name="pid">
<option value="">请选择省份 </option>
<option value="1">北京市 </option>
<option value="2">上海市 </option>
<option value="3">重庆市 </option>
</select>
* @return
*/
public String putDataToSelect(){
List<Privice> pList = new ArrayList<Privice>();
Privice privice1 = new Privice();
privice1.setPid(1L);
privice1.setPname( "北京市");
Privice privice2 = new Privice();
privice2.setPid(2L);
privice2.setPname( "上海市");
Privice privice3 = new Privice();
privice3.setPid(3L);
privice3.setPname( "重庆市");
pList.add(privice1);
pList.add(privice2);
pList.add(privice3);
//放在map栈中;
ActionContext. getContext().put("pList", pList);
return "select_map" ;
}
}
2.配置文件:struts-ui.xml:
<?xml version= "1.0" encoding ="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="ui" namespace="/" extends="struts-default" >
<action name= "uiAction_*" method ="{1}" class="cn.itheima03.struts2.ui.UIAction" >
<result name="user_objstack" >ui/ui.jsp</ result>
<result name= "user_map">ui/ui.jsp </result>
<result name="user_actionproperty" >ui/ui.jsp</ result>
<result name="select_map" >ui/ui.jsp</ result>
</action>
</package >
</struts>
2.jsp页面利用struts标签回显数据:
在jsp页面引用ui标签时,要加上:
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ page language="java" import= "java.util.*" pageEncoding="UTF-8" %>
<%@ taglib uri="/struts-tags" prefix= "s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body >
<s:form action= "uiAction_form.action">
<!--
cssClass相当于 html标签中的class
-->
用户名: <s:textfield name="username" ></s:textfield>< br/>
密码: <s:password name= "password" showPassword="true" ></s:password ><br/>
<!--
list是select填充数据的来源
list后面能直接跟 ognl表达式
listKey是option中value的值
listValue是要显示的值
headerValue顶部要显示的内容
-->
<!-- s:select标签 -->
选择省份: <s:select name= "pid" list="#pList" listKey="pid" listValue="pname" headerKey="" headerValue= "请选择省份" ></s:select>< br/>
<!-- checkboxlist 标签 -->
省份: <s:checkboxlist list= "#pList" name="pid" listKey="pid" listValue="pname" ></s:checkboxlist>
</s:form>
</body >
</html>
效果图:
翻译过后的源代码:
<body>
<form id="uiAction_form_action" method="post" action="/itheima03_struts2/uiAction_form.action" name="uiAction_form_action">
用户名:
<input id="uiAction_form_action_username" type="text" value="" name="username">
<br>
密码:
<input id="uiAction_form_action_password" type="password" value="" name="password">
<br>
选择省份:
<select id="uiAction_form_action_pid" name="pid">
<option value="">请选择省份</option>
<option value="1">北京市</option>
<option value="2">上海市</option>
<option value="3">重庆市</option>
</select>
<br>
省份:
<input id="pid-1" type="checkbox" value="1" name="pid">
<label class="checkboxLabel" for="pid-1">北京市</label>
<input id="pid-2" type="checkbox" value="2" name="pid">
<label class="checkboxLabel" for="pid-2">上海市</label>
<input id="pid-3" type="checkbox" value="3" name="pid">
<label class="checkboxLabel" for="pid-3">重庆市</label>
<input id="__multiselect_uiAction_form_action_pid" type="hidden" value="" name="__multiselect_pid">
</form>
</body>