• jsp页面,使用Struts2标签,传递和获取Action类里的参数,注意事项。<s:a action><s:iterator><s:param>ognl表达式


         在编写SSH2项目的时候,除了使用<s:form>表单标签向Action类跳转并传递参数之外,很更多时候还需要用到<s:a action="XXX.action">这个链接标签进行跳转,此时,传递需要的参数必不可少。此外,在jsp页面获取Action类传来的数据时,也需要留心一下属性获取的方式。

         之前在这里,由于我的粗心大意,导致了jsp页面上没有相应的数据显示出来。原本以为是没有从数据库读取到数据,使得我从持久层、dao层、service层、action类检查了好几遍,修改了多次代码,结果却发现,是最后的jsp没把数据显示出来。所以有必要做个记录,以后避免此类情况再次发生。


    (1)  jsp页面获取属性值

    AbcAction.java  -->  xxx.jsp

    AbcAction.java类里有属性List<Article> articles,并有相应的GetterSetter方法。

    在xxx.jsp页面,通过<s:iterator>输出

    <s:iterator>标签里有id属性时,在输出属性值时,要加上#

    <s:iterator value="articles"  id="article" status="st"><!-- 有id属性 -->
      <s:property value="#article.title"/>        <!-- 输出article里的属性时需要加上# -->
    </s:iterator>
    
    <s:iterator value="articles" status="st"><!-- 没有id属性 -->
      <s:property value="title"/>         <!-- 直接可输出article里的属性 -->
    </s:iterator>

    若无需使用<s:iterator>标签,仅需<s:property value=""/>时

    1)获取action类里的属性,<s:property value="article.title"/>,不添加#,否则无法获取属性值

    2)获取非action类的属性,<s:property value="#session.user"/>,必须添加#,否则无法获取属性值


    (2)jsp页面传递参数

     xxx.jsp  -->  AbcAction.java 

    1)通过<s:param>标签

    需在struts.xml文件中配置Abc.action

    <s:a action="abc.action">
        跳转到abc.action,并传入articleid、articleName参数
         <s:param name="articleId"><s:property value="#article.id"/></s:param>
         <s:param name="articleName" value="article.name"/>
     </s:a>

    当然AbcAction.java里必须由articleId的属性以及getterSetter方法。

    2)通过href属性ch传递传递

    <s:a href="abc.action?articleId=<s:property value='#article.id/'>">
         跳转到AbcAction.java,并给articleId属性赋值
    </s:a>

     3)使用常用的表单提交,如果需要用到hidden隐藏域的话<input type="hidden"><s:hidden/>

    <s:hidden name="username" value="#session.user"/>
    #session.user这种方式无法获取session里的user,%{session.user}也不行,不知何故。
    除非换成<input>标签,然后使用%{session.user}才行,像下面这样
    <input type="hidden" name="username" value="${session.user}"/>。

    不过一般不需要把session里的值放入hidden隐藏域里面,因为在一次会话中,session里的值会一直存在。当需要的时候,在Action类里直接通过ActionContext获取就行了。


  • 相关阅读:
    EJB到底是什么,真的那么神秘吗??
    An Assembly Language
    Memory Layout (Virtual address space of a C process)
    手机测试用例-游戏测试用例
    手机测试用例-工具箱测试用例
    手机测试用例-输入法测试用例
    手机测试用例-时钟测试用例
    手机测试用例-多媒体测试用例
    手机测试用例-设置测试用例
    手机测试用例-通话记录测试用例
  • 原文地址:https://www.cnblogs.com/MrReboot/p/6885198.html
Copyright © 2020-2023  润新知