如何在JSP中以格式而不是[x1,x2,x3]显示列表的值?

时间:2014-05-20 02:56:44

标签: jsp struts2 jstl checkboxlist

短篇小说:

我有一个字段如下<整数> 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 look来浏览所有项目并以所需格式创建项目字符串,但还有其他方法吗?

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

只需将您的代码行更改为

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

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

我的建议:

创建bean对象列表:

Class Engine{
int enginePower;
String description;
}

现在List <Engine> 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;
    }
}

我想这就是你要找的东西

答案 2 :(得分:0)

您可以在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>