• struts2基础总结


    Struts2基础

    #的用法:

    1、从map栈中取值,

    2、从对象栈中值则不用加#号(如果通过set放进对象栈的对象,则通过对象名.属性来取)

    %用法:

    1、 文本框<s:textfield name="test" value="%{#request.text}"></s:textfield>

    2、 配置result中使用<result name="text">ognl/%{#test-url}</result>

    3、 输出字符串:<s:property value="%{'<hr>hr'}" escape="false"/>

    $用法:

    $(对象栈的属性):这样就可以在非struts2标签中使用对象栈的值

    Property标签

    1escape属性,默认为true,设置为false时,不转义

    <s:property value="%{'<hr>hr'}" escape="false"/>

    2default 属性,当value的值不存在是,输出默认值

    s:property value="#xixifasf" default="dafhodsh"/>

    3<s:property/>:什么属性都不写,表示输出栈顶元素值

    Debug标签

    <s:debug></s:debug>//利用这个标签可以输出ognlcontext中所有的值

    注意:注释(通用)

    <!-- 大家好 -->

    该注释方法仍然会被编译,如果是纯文本则在源代码中可以显示;如果含有代码,则会编译成对应值输出

    <%-- <s:set value="%{'你好'}" var="aa" scope="request"></s:set>--%>

    该注释方法,不回被编译,即使在源代码中也看不到

    “valueStack”=OgnlValueStack

    .context=OgnlContext

    ._root=CompoundRoot   //对象堆栈

    ._values = HashMap<K.V> //Map堆栈

    .table=HashMap$Entry<K.V>

    [2]application对应的地址

    [14]session对应的地址

    [23]request对应的地址

    [24]action对应的地址

    [27]parameters对应的地址

    .root= CompoundRoot   //对象堆栈

    elementData=Object[2]

    .[0]=ValueStackAction

    .[1]=DefaultTextProvider

    1<s:debug></s:debug>//利用这个标签可以输出ognlcontext中所有的值

    Push标签:

    value放到对象栈顶,但只能在内部才能取到对应的值,标签结束,值便消失

    <s:push value="%{'大家好'}">

    <s:property/>

    <s:debug></s:debug>

    </s:push>

    2测试set标签:<br>

    <s:set value="#request.request_username" var="aaaaa" scope="request"></s:set>

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

    说明:这样的情况,aaaaakey值会出现在request域中。

    <s:set value="#request.request_username" var="aaaaa"></s:set>

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

    说明:这种写法aaaaa会作为一个key值存在ognlmap中。所以利用

    <s:property value="#aaaaa"/>也能输出值。

    3显示map栈中域的值

    输出request域中的值<s:property value="#request.request_name"/><br/>

    //attr表示依次在各域中查找

        输出session域中的值<s:property value="#attr.session_name"/><br/>

        输出application域中的值<s:property value="#application.application_name"/>

    显示map栈中map的值:<s:property value="#xixi"/>

    4Radio标签

    <s:radio list={'"#male':'','female':''}name="sex" label="性别" ></s:radio><br/>

     <!-- 两者写法效果相同 -->

     <s:radio list="#request.map" name="sex" label="性别"/>

    4、取值方法

    ValueStack的push方法,push(student); 将对象直接放到栈顶中去

    ValueStack的set方法,set("person", person);将对象放到对象栈的HashMap中去

    ValueStack的setValue(“comment”,update)方法,设置栈顶参数值

    ValueStack的getValue()方法,获取栈顶参数值 getValue in interface Map.Entry

    Resultname的作用,当一个action中有多个result时,就需要用name来区别

    <result name="scope">ognl/showscope.jsp</result>

    5、配置常量

    Constantd的配置可以覆盖掉default.properties文件中的,还可以覆盖struts-default.xml,struts-plugin.xml这些xml文件中关于常量的内容

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

    注意:value值如果有多个,可以用”,“隔开

    6、result中的type

    redirectredirectAction chain的区别

    定义:当使用type=redirectAction” 或type=redirect”提交到一个action并且需要传递一个参数时。

    这里是有区别的:

    1、使用type=redirectAction”时,结果就只能写Action的配置名,不能带有后缀:“.action

    2、使用type=redirect”时,结果应是action配置名+后缀名

    Struts2常用标签

    不会的时候查看内存快照是个好方法

    struts的标签不懂的,拿到页面一看源代码就行了

    form默认methodpost

    用了ognl表达式action="/userAction_doEdit.action"不用${pageContext.request.contextPath}

    讲了表单

    radio标签

    <s:radio list="{'JavaEE+Android课程','Net+WindowPhone课程','JavaEE+物联云计算课程'}" 

    onselect="courseName" name="courseName" label="意向课程"></s:radio>

    select标签

    s:select 

    list属性代表数据的来源

    listKey相当于option元素中的value属性的值

    listValue相当于option元素中要显示的值

    headerKey是最上面的option元素的value的值

    headerValue是最上面的option元素的要显示的值

    name属性,可以实现回显功能

    s:checkboxlist

    list数据的来源

    listKey value的值

    listValue 显示的值

    name 必须要有

    <!-- 没有解决默认选中的问题 -->

       <s:checkboxlist list="#list" listKey="sid" listValue="sname" name="用户名"></s:checkboxlist>

    s:iterator 属性都存在map栈中

    value 数据来源,没有则默认找栈顶元素对象

    [var] 可选,表示当前迭代对象,当多层循环时要用

    status 当前元素一些属性值

    count 遍历了的第几个数据

    index 正在遍历的索引值

    even 是否为偶数

    odd 是否为奇数

    说明:迭代的时候,struts2会把元素对象临时放到栈顶,循环结束后删除

    格式:

    list的迭代

    <s:iterator value="#personList" var="pList" status="st">

    <tr class="<s:propery value="#st.even?'even':'odd'">

    <s:porperty value="#pList.pid"/>

    <s:porperty value="#pList.pname"/>

    <s:porperty value="#st.count"/>

    <s:porperty value="#st.index"/>

    <s:porperty value="#st.even"/>

    <s:porperty value="#st.odd"/>

    <s:iterator/>

    特别的:将personList push到栈顶

    则修改为<s:iterator>

    Map的迭代,value得到的是entry,对应keyvalue

    <s:iterator value="#map">

    </s:porperty value="key">

    </s:porperty value="value.pid">

    </s:porperty value="value.pname">

    <s:iterator/>

    多层的迭代(list<map>)

    <s:iterator value="#lists">

    <s:iterator [value="top"]>

    <s:porperty value="key"/>

    </s:porperty value="value.pid">

    </s:porperty value="value.pname"/

    </s:iterator>

    </s:iterator>

    if else语句

    <s:if test="">

    </s:if>

    <s:elseif test="">

    </s:elseif>

    <s:else>

    </s:else>

    超级链接语句

    <s:a action=""></s:a>

    1、针对struts2.1的版本

    如果超级要加一个参数

    正确的写法是tagAction_show_href_ifelse?pid=%{pid}

    错误的写法是tagAction_show_href_ifelse.action?pid=%{pid}

    2EL表达式$ognl表达式问题

    ognl标签外部可以使用el表达式,ognl标签内不可以使用

    html标签中,只能使用el表达式

    <s:a action="tagAction_show_href_ifelse?pid=${pid}"></s:a>



  • 相关阅读:
    记一次网站迁移的过程
    如何才能搜索微信群和网盘群
    2021最新车载u盘歌曲集合,每轴更新。想要拉你入群
    工具分享:目录生成器
    福利,剪映PC版来了~ 支持windos系统和苹果系统
    微信8.0来了,可以加1w人好友,微商必看!!!
    centOS7安装 redis server
    Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)')
    《More Effective C++》读书笔记(下)
    《More Effective C++》读书笔记(中)
  • 原文地址:https://www.cnblogs.com/kuyuyingzi/p/4266384.html
Copyright © 2020-2023  润新知