jsp - 如何拥有 <s :if> with two conditions in Struts 2

标签 jsp struts2 ognl

我遍历项目列表,如果元素的状态等于学生或老师,则需要显示特定的下拉列表。以下代码显示所有字段,但不显示任何元素的下拉列表!

 <s:iterator value="listOfPeople" status="element">
   .....
  <s:if test='%{elements[#element.index].Status.equalsIgnoreCase("Student") ||
          elements[#element.index].Status.equalsIgnoreCase("Teacher")}'>

            <s:select name="elements[%{#element.index}].Status"
                               id="elements[%{#element.index}].Status"
                               label="Status"
                               list="#{'Student':'Student','Teacher':'Teacher'}"
                               headerKey = "-1"
                               headerValue=" "
                               value="%{Status}"
             />

    </s:if>
在 Controller 中:
    PeopleModel peopleModel = new PeopleModel();
    listOfPeople = peopleModel.findPeople();
    System.out.println("size is:" + listOfPeople.size());  //returns 8
    return "listPeople";
我的型号:
    List<People> people = new ArrayList();
    final Session session = HibernateUtil.getSession();
    try {
        final Transaction tx = session.beginTransaction();
        try {

            Criteria criteria = session.createCriteria(People.class, "People")
            people.addAll((List<People>) criteria.list());
            if (!tx.wasCommitted()) {
                tx.commit();
            }
            if (session.isOpen()) {
                session.close();
            }
            System.out.println("size is ::: " + people.size());   //returns 8
            return people;

        } catch (Exception e) {
            tx.rollback();
            e.printStackTrace();
        }
    } finally {
        HibernateUtil.closeSession();
    }
    return null;
}
以下代码的结果
   Status: ${Status}
   <br/>value : [<s:property value="elements[%{#element.index}].Status" />]
                       
Status : Principle
value : [] Status : Student
value : [] Status : Teacher
value : [] Status : Teacher
value : [] Status : Teacher
value : [] Status : Teacher
value : [] Status : Teacher
value : [] Status : Teacher
value : [] 
上面的结果显示第一个人的状态与其他人分开,这就是为什么最后一个值:[] 没有显示任何状态。
如果我取出 Status: ${Status} 结果将是
value : []
value : []
value : []
value : []
value : []
value : []
value : []
value : []
               

最佳答案

%{}围绕整个表达式,而不是像其他标签的其他属性那样位于中间:

还可以对字符串使用更合适的相等函数,like described here

<s:if test='%{elements[#element.index].status.equalsIgnoreCase("Student") ||
              elements[#element.index].status.equalsIgnoreCase("Teacher")}'>

编辑 :伙计,你做了很多奇怪的事情;
  • ${Status}是JSP EL,你不需要使用它;
  • 您正在迭代一个源,并检查另一个源:打印 <s:property value="elements[%{#element.index}].Status" />给你一个空的结果,我看不到 elements代码中任何地方的东西;
  • 属性中第一个的大写字母是错误的,因为如果变量名为 foo setter/getter 是 getFoo() , 在页面中您将有 .foo ,不是 .Foo .如果您的变量名为 Foo ,这是违反规范/最佳实践的,让我们以小写字母开头变量名称。

  • 那么如果你有 private Object Status ,将其更改为 private Object status; ,连同 getter 和 setter,以及在页面中使用:
    <s:iterator value="listOfPeople" status="element">
        <s:if test='%{listOfPeople[#element.index].status.equalsIgnoreCase("Student") ||
                      listOfPeople[#element.index].status.equalsIgnoreCase("Teacher")}'>
    

    或使用 var
    <s:iterator value="listOfPeople" status="element" var="row">
        <s:if test='%{row.status.equalsIgnoreCase("Student") ||
                      row.status.equalsIgnoreCase("Teacher")}'>
    

    或者干脆
    <s:iterator value="listOfPeople" status="element">
        <s:if test='%{status.equalsIgnoreCase("Student") ||
                      status.equalsIgnoreCase("Teacher")}'>
    

    奇怪的代码导致奇怪的结果......然后直接使用它:)

    关于jsp - 如何拥有 <s :if> with two conditions in Struts 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22316082/

    相关文章:

    HTML 表单 Action 标签。调用父相对 URL

    java - @ModelAttribute Spring MVC 多重选择不设置ArrayList

    java - 如何在 JSP 页面中检索并显示数据库中的图像?

    java - 使用 JSTL 循环

    jquery - struts 2 jquery插件设置表单目标

    java - 实现可导航图的优雅方式?

    java - 为每个结果发送一个参数

    java - 随着 Xwork 升级到 2.0.6,字段错误键发生变化

    java - 无法在struts2中的modelDreiven拦截器中将字符串设置为Int

    jsp - 如何在 Struts 2 中测试 bean 属性?