【问题标题】:How to show values of a list in a format rather than [x1,x2,x3] in JSP?如何在 JSP 中以格式而不是 [x1,x2,x3] 显示列表的值?
【发布时间】:2014-05-20 02:56:43
【问题描述】:

短篇小说:

我有一个字段如下 List engine = new ArrayList();当我在 jsp 中使用 ${engine} 时,它以 [x1,x2] 格式显示它的值,但我需要它是 engine=x1,engine=x2 来建立链接。怎么做?另一种选择是让后端接受 [x1,x2] 格式的值。

长篇大论:

我有一个包含两个复选框列表的表单,用户正在根据一些项目(例如车门数量和发动机功率)来寻找汽车。提交表格后,将显示任何数量的汽车与搜索条件匹配的所有汽车品牌。一旦用户点击任一品牌,所有匹配的汽车都会显示出来。

 ...
 <s:checkboxlist name="engine" label="Engine" list="@com.car.interfaces.Lists@Engine"/>
 <s:checkboxlist name="door" label="door" list="@com.car.interfaces.Lists@Door"/>
 ....

我使用以下两个代码来显示结果,但两者的输出都是这种格式 [1000,2000]

   <s:property value="%{engine}"/>   
   ${engine}        

当显示结果时,链接将创建如下

<a href ="....?${engine}&${door}&....">View Cars</a>
which would change to following
<a href="....?engine=[1000,2000]
              &door=[2,4,5]&.....">View Cars</a>

当我点击链接时无法找到项目;但是,如果我将值的格式更改为 1000,2000,它会起作用。

我知道,一种方法是使用 for 查找查看所有项目并以所需格式创建项目字符串,但还有其他方法吗?

public static final Map Engine = new TreeMap() {
        {
            put(1000, "Small");
            put(2000, "Good");
            put(3000, "Standard");
            put(4000, "Powerful");
            put(5000, "Excellent");
        }
    ;
    };

【问题讨论】:

  • 你做错了什么。 url 中的参数应为engine=1000&amp;engine=2000 格式。你是如何创建这个网址的?
  • @AleksandrM 这也是我的问题,代码将地址创建为 engine=[1000,2000] 我希望它们像 engine=1000,2000 或者你解释的那样。请阅读我的问题的“短篇小说”部分,谢谢。
  • 但是您还没有显示如何创建这样的 url。那么复选框如何适合您的问题呢?你有表格吗?为什么要自己创建url?
  • @AleksandrM 我包含了我的复选框列表代码,还显示并解释了我创建 URL 的原因和方式。你有表格吗? “我有一个有两个复选框列表的表单......”你为什么要自己创建 url? “一旦提交表格,将显示所有汽车品牌,只要他们的汽车数量与搜索条件相匹配。一旦用户点击任一品牌,所有匹配的汽车都将显示。”为了澄清,创建了一个表单,用户选择其复选框列表中的项目并提交表单,结果将显示,用户可以单击每个结果以查看更多详细信息。

标签: jsp struts2 jstl checkboxlist


【解决方案1】:

使用 Struts2 标记从列表中创建 url 参数。 &lt;s:param&gt; 标签会将value 属性中传递的列表展开为param_name=val1&amp;param_name=val2 格式。

<s:url>
  <s:param name="engine" value="engine" />
  <s:param name="door" value="door" />
</s:url>

【讨论】:

  • 我曾经使用它,但似乎每次我提交页面并显示结果时都需要在编辑搜索条件之前刷新页面,因为不刷新页面参数值不会改变。
  • @JackMoore:这是另一个问题。您的 OP 是关于 url 生成的。
【解决方案2】:

只需将您的代码行更改为

<s:checkboxlist name="engine" label="Engine" list="engine"/>

属性list 的值应该是您的列表名称List &lt; Integer &gt; engine = new ArrayList(); 无需提供${engine}

我的建议:

创建 bean 对象列表:

Class Engine{
int enginePower;
String description;
}

现在List &lt;Engine&gt; engineList = new ArrayList();

所以最后你的 checBoxList

<s:checkboxlist name="engineArray" label="Engine" list="engineList" listValue="description" listKey="enginePower"/>

您可以访问以下值:

public class Handler extends ActionSupport{

      private String[] engineArray;

public void setEngineArray(String[] engineArray){

        this.engineArray= engineArray;
    }

@Override
    public String execute() throws Exception {

        // use the checkbox values here

        return Action.SUCCESS;
    }
}

我猜这就是你要找的东西

【讨论】:

  • 目前,我使用的是地图,因为值为 pur(1000,"small"); pur(2000,“好”); pur(3000,"power");
  • 这是不可能的,因为我正在使用一个类来接收搜索项,请使用类 Items { private List engine; ....作为一个例子。
  • 你可以创建不同的类名,比如“EngineDTO”或者你想要的东西
  • 您对 j888 的回答有何看法?
【解决方案3】:

您可以在 JSP 中将结果格式化如下:您可以在循环中添加逗号或使用提供的函数。

 <c:forEach items="${engine}" var="currentItem" varStatus="status">
       <c:set var="myVar" value="${status.first ? ' ' : myVar} ${currentItem}" />
 </c:forEach>

 <c:set var="string1" value="${myVar}"/>
 <c:set var="string2" value="${fn:split(string1, ' ')}" />
 <c:set var="string3" value="${fn:join(string2, ',')}" />

 <p>String (3) : ${string3}</p>

【讨论】:

    猜你喜欢
    • 2015-06-04
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2021-12-13
    • 2020-01-28
    • 2017-03-05
    相关资源
    最近更新 更多