struts2中页面取值的原理以及valueStack的应用

 

一个简单的用struts2标签代码获取action中属性的例子  

<table border="1" width="360">
   <caption>
    作者李刚的图书
   </caption>
   <!-- 迭代输出ValueStack中的books对象,其中status是迭代的序号 -->
  
 <s:iterator value="books" status="index">
    <s:if test="#index.odd == true">
     <tr style="background-color: #cccccc">
    </s:if>
    <s:else>
     <tr>
    </s:else>
    <td>
     书名:
    </td>
    <td>
     <s:property />
    </td>
    </tr>
   
</s:iterator>
  </table>


Struts2将所有属性值封装在struts.valueStack请求属性里,可以通过request.getAttribute("struts.valueStack")获取。Action所有的属性都被封装到了ValueStack对象中,它类似于map,Action中的属性名可以理解为ValueStack中value的名字。可以通过valueStack.findValue("name")来取值。

 

 

BookService.java

public class BookService
{
 // 模拟数据库
 private String[] books =
  new String[] {
   "疯狂Java讲义" ,
   "轻量级Java EE企业应用实战",
   "疯狂Ajax讲义",
   "疯狂XML讲义",
   "Struts 2权威指南"
  };

 public String[] getLeeBooks()
 {
  return books;
 }


}

 


GetBooksAction.java

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;

public class GetBooksAction implements Action
{
 private String[] books;

 public void setBooks(String[] books)
 {
  this.books = books;
 }

 public String[] getBooks()
 {
  return books;
 }

 public String execute() throws Exception
 {
  String user = (String)ActionContext.getContext().getSession().get("user");
  if (user != null && user.equals("crazyit"))
  {
   BookService bs = new BookService();
   setBooks(bs.getLeeBooks());
   return SUCCESS;
  }
  else
  {
   return LOGIN;
  }
 }
}

 


showBooks.jsp

<table border="1" width="360">

<%

// 获取封装输出信息的ValueStack对象
ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");

// 调用ValueStack的fineValue方法获取Action中的books属性值
String[] books = (String[ ])vs.findValue("books");

//迭代输出全部图书信息
for (String book : books)
{
%>


<tr>
<td>书名:</td>
<td><%=book%></td>
</tr>

<%}%>


</table>

原帖地址:http://terryjs.iteye.com/blog/767699

 

 

你可能感兴趣的:(String,struts,iterator,action,border,books)