1. 程式人生 > >Struts2第十一篇【簡單UI標籤、資料回顯】

Struts2第十一篇【簡單UI標籤、資料回顯】

Struts2UI標籤

Sturts2為了簡化我們的開發,也為我們提供了UI標籤…也就是顯示頁面的標籤…..

但是呢,Struts2是服務端的框架,因此使用頁面的標籤是需要在伺服器端解析然後再被瀏覽器解析最後才顯示在頁面上的。因此,它的效能是不夠HTML標籤好的…HTML直接就能夠被瀏覽器解析

還有一點是:我們在寫網頁的時候,肯定是需要使用div+css的頁面佈局的使用Struts2UI標籤也沒法幹了….因此,除了有必要的話,才去使用Struts2UI標籤

簡單使用Struts2UI標籤


<%--我們發現,Struts2UI標籤用起來和HTML是差不多的--%>
<s:form id="form1" name="form1" method="POST" action="#"> <%--輸入框資料,lable就相當於我們以前外邊寫的資料--%> <s:textfield label="使用者名稱" name="user.username"/> <%--密碼框--%> <s:password label="密碼" name="user.password"/> <%--提交按鈕--%> <s:submit value="提交"
/>
</s:form>

當我們檢視原始檔的時候,發現Struts2UI標籤為我們自動加入了很多的標籤

這裡寫圖片描述

設定主題

上面已經說了,Struts2UI標籤為我們自動加入了很多的標籤,那有的時候,我們不想要,或者換一種風格的話,怎麼辦???

Struts2UI標籤也為我們提供了“主題”這樣的功能

當我們在表單中設定theme屬性為simple之後…我們發現原始檔Struts2自動為我們新增的標籤全沒了。

這裡寫圖片描述

如果我們想整個專案都是使用simple為主題的話,我們可以在配置檔案中配置


  <constant name="struts.ui.theme"
value="simple"/>

資料回顯

我們對資料回顯也不會陌生,在使用EL表示式的時候就已經用過了資料回顯了….那為啥資料回顯放在Struts2標籤這裡講解呢???因為Struts2也提供了資料回顯的支援,並且,使用資料回顯必須要使用Struts2的標籤

這裡寫圖片描述

按照正常思路寫資料回顯

在Struts中按照正常思路寫資料回顯是這樣的:

  • 把資料放到request域中儲存,跳轉到對應的JSP頁面…
    public String login() {
        //把資料儲存到域中
        Map<String, Object> request = ActionContext.getContext().getContextMap();

        request.put("username", "zhongfucheng");
        request.put("password", "123");

        return SUCCESS;
    }
  • JSP頁面使用Struts2標籤,設定value屬性就可以進行資料回顯了

<s:form id="form1" name="form1" method="POST" action="" >


    <%--輸入框資料,lable就相當於我們以前外邊寫的資料--%>
    <s:textfield label="使用者名稱" name="user.username" value="%{#request.username}"/>

    <%--密碼框--%>
    <s:password label="密碼" name="user.password"/>

    <%--提交按鈕--%>
    <s:submit value="提交"/>

</s:form>
  • 效果:

這裡寫圖片描述

Struts2提供的資料回顯

其實,上面的程式碼已經實現了資料回顯,但Struts2提供了一個更巧妙的方法

這裡寫圖片描述

也就是說,Struts2可以直接在name中就可以實現資料回顯了….要做的是:

  • 我們回顯的資料在根元素下的,也就是儲存在CompoundRoot中的資料【儲存在根元素的資料不用使用#號就可以獲取】

因此,我們把想要回顯的資料放在CompoundRoot下

  • 直接放在值棧的資料就是根元素資料

        //得到值棧物件
        ValueStack valueStack = ActionContext.getContext().getValueStack();
        valueStack.set("username","zhongfucheng");
  • 在JSP就可以直接獲取了

  <s:textfield label="使用者名稱" name="username"/>
  • 效果:

這裡寫圖片描述