【问题标题】:Get all parameters from JSP page从 JSP 页面获取所有参数
【发布时间】:2010-03-30 21:00:55
【问题描述】:

我有 n 个以“问题.....”形式命名的文本字段。如何从 JSP 页面获取所有以“question”开头的参数到 Action?

【问题讨论】:

    标签: jsp parameters


    【解决方案1】:
    <%@ page import = "java.util.Map" %>
    Map<String, String[]> parameters = request.getParameterMap();
    for(String parameter : parameters.keySet()) {
        if(parameter.toLowerCase().startsWith("question")) {
            String[] values = parameters.get(parameter);
            //your code here
        }
    }
    

    【讨论】:

    • 好答案。有一点虽然,你不应该迭代这样的地图,你应该使用类似 for(Entry paramEntry : parameters.entrySet())
    • 与上述方法相比有什么优势?
    • 性能。在第一种方法中,您遍历键并为每个键执行查找。在实践中,性能并没有太大的差异,特别是对于一个很小的映射的请求参数。不过,如果可以,建议避免查找。
    • 实际上只对以"question" 开头的键进行查找,但正如您所提到的,理论上它比遍历条目要慢。
    • 另一个优点是您在单个对象中拥有所需的信息。这在使用流时效果很好。
    【解决方案2】:

    尽管这是一个老问题,但我今天不得不做类似的事情,但我更喜欢 JSTL:

    <c:forEach var="par" items="${paramValues}">
        <c:if test="${fn:startsWith(par.key, 'question')}"> 
    ${par.key} = ${par.value[0]}; //whatever
        </c:if>
    </c:forEach>
    

    【讨论】:

    • 您也可以使用 ${par.key.startsWith('question')} 代替 fn:startsWith()。
    【解决方案3】:

    这应该打印出所有以“问题”开头的参数。

    <html><body>
    <%@ page import = "java.util.*" %>
    <b>Parameters:</b><br>
    <%
      Enumeration parameterList = request.getParameterNames();
      while( parameterList.hasMoreElements() )
      {
        String sName = parameterList.nextElement().toString();
        if(sName.toLowerCase.startsWith("question")){
          String[] sMultiple = request.getParameterValues( sName );
          if( 1 >= sMultiple.length )
            // parameter has a single value. print it.
            out.println( sName + " = " + request.getParameter( sName ) + "<br>" );
          else
            for( int i=0; i<sMultiple.length; i++ )
              // if a paramater contains multiple values, print all of them
              out.println( sName + "[" + i + "] = " + sMultiple[i] + "<br>" );
        }
      }
    %>
    </body></html>
    

    【讨论】:

    • toLowerCase 缺少括号
    【解决方案4】:
    localhost:8080/esccapp/tst/submit.jsp?key=datr&key2=datr2&key3=datr3
    
        <%@page import="java.util.Enumeration"%>
    
        <%
        Enumeration in = request.getParameterNames();
        while(in.hasMoreElements()) {
         String paramName = in.nextElement().toString();
         out.println(paramName + " = " + request.getParameter(paramName)+"<br>");
        }
        %>
    
        key = datr
        key2 = datr2
        key3 = datr3
    

    【讨论】:

      【解决方案5】:

      最快的方法应该是:

      <%@ page import="java.util.Map" %>
      Map<String, String[]> parameters = request.getParameterMap();
      for (Map.Entry<String, String[]> entry : parameters.entrySet()) {
          if (entry.getKey().startsWith("question")) {
              String[] values = entry.getValue();
              // etc.
      

      请注意,您不能这样做:

      for (Map.Entry<String, String[]> entry : 
           request.getParameterMap().entrySet()) { // WRONG!
      

      原因解释here

      【讨论】:

        【解决方案6】:
        HTML or Jsp Page         
        <input type="text" name="1UserName">
        <input type="text" name="2Password">
        <Input type="text" name="3MobileNo">
        <input type="text" name="4country">
        and so on...
        in java Code 
        
         SortedSet ss = new TreeSet();
         Enumeration<String> enm=request.getParameterNames();
        while(enm.hasMoreElements())
        {
            String pname = enm.nextElement();
            ss.add(pname);
        }
        Iterator i=ss.iterator();
        while(i.hasNext())
        {
            String param=(String)i.next();
            String value=request.getParameter(param);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多