1. 程式人生 > >【基於初學者的SSH】struts2 值棧的詳解與struts2標簽庫+ognl表達式

【基於初學者的SSH】struts2 值棧的詳解與struts2標簽庫+ognl表達式

radi ring etl action 值棧 多選 https submit 技術分享

一:什麽是值棧:struts2裏面本身提供的一種存儲機制,類似於域對象,值棧,可以存值和取值

 特點:先進後出,最上面的元素叫做棧頂,也叫壓棧。

 <s:debug></s:debug>可以看到棧的元素,棧的結構為root和context,root返回的結構是list集合,context返回的是map集合

二:action和servlet區別:

每次訪問的action的時候,都會創建一個新的action對象,而servlet只會創建一個對象

註意:每次訪問action都會創建一個action對象,action對象裏面都且只有一個值棧的對象

三:值棧的對象:

ActionContext ac=ActionContext.getContext();

ValueStack v1=ac.getValueStack();

不常用,通常都是使用ognl表達式來取值,下面來講幾種實例,在此之前要先在jsp中導入標簽庫<%@ taglib prefix="s" uri="/struts-tags"%>

三:向值棧裏面保存變量並取值

01):保存變量

private String name;

public String getName() {
return name;
}

@Override

public String execute() throws Exception {

name = "張三";

}

02):取值

<s:property value="name" />

四:向值棧裏面保存對象並取值:

01):創建preson的類,實例化,得到get的方法

private Person person = new Person();

public Person getPerson() {
return person;
}

@Override

public String execute() throws Exception {

person.setName("張安");
person.setAge(1);
person.setSex("女");

}

02):取值(對象名.屬性名):

<s:property value="person.name" />
<s:property value="person.age" />
<s:property value="person.sex" />

五:向值棧裏保存集合並取值

01):實例化一個list集合

private List<Person> lp = new ArrayList<Person>();

public List<Person> getLp() {
return lp;
}

@Override

public String execute() throws Exception {

lp.add(new Person("李四",1,"男"));
lp.add(new Person("王五",2,"女"));

}

02):取值

    <!-- 取集合的值01 -->
    <s:property value="lp[0].name" />
    <s:property value="lp[1].name" />
    <br>
    <!-- 取集合的值02 -->
    <s:iterator value="lp">
        <s:property value="name" />
        <s:property value="age" />
        <s:property value="sex" />
        <br>
    </s:iterator>
    <!-- 取集合的值03 加了var屬性後就是從context裏面取值,所以要加#號 -->
    <s:iterator value="lp" var="l">
        <s:property value="#l.name" />
        <s:property value="#l.age" />
        <s:property value="#l.sex" />
    </s:iterator>

六:向值棧裏添加域對象的值

01):向值棧裏面添加

@Override

public String execute() throws Exception {

//域對象
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("abc", "域對象的值");
return SUCCESS;

}

02):取值

<s:property value="#request.abc" />

七:在form標簽裏面使用屬性值:

<s:textfield name="text" value="%{name}"></s:textfield>(使用%{}就可以轉)

八:form標簽:

<!-- from標簽 -->
<s:form action="" method="post">
<!-- 相當於text 文本框 -->
<s:textfield></s:textfield>
<!-- 密碼框 -->
<s:password></s:password>
<!-- 單選框 必須有name屬性值 -->
<s:radio list="#{‘1‘:‘男‘,‘2‘:‘女‘}" value="1" name=""></s:radio>
<!-- 多選框,name屬性必須要 -->
<s:checkboxlist list="#{‘1‘:‘皮皮蝦‘,‘2‘:‘糖醋魚‘,‘3‘:‘炒年糕‘}" value="1" name=""></s:checkboxlist>
<!-- 下拉框,用combox的話就會帶一個文本框綁定value值 -->
<s:select list="#{‘1‘:‘皮皮蝦‘,‘2‘:‘糖醋魚‘,‘3‘:‘炒年糕‘}" ></s:select>
<!-- 提交 -->
<s:submit></s:submit>
<!-- 重置 -->
<s:reset></s:reset>
</s:form>

效果圖:

技術分享

【基於初學者的SSH】struts2 值棧的詳解與struts2標簽庫+ognl表達式