Java 关于request.getParameter和JSTL

Java 关于request.getParameter和JSTL,java,jsp,jstl,Java,Jsp,Jstl,在一个JSP中,我有一个JSTLforeach编码如下:foreach var=I begin=1 end=rowsremaining。 后来在代码中 <td class=value align=left valign=top> <input name=${i}Last_Name value="<%=Last_Name%> type="text" /> </td> 问题:为什么我的所有变量lastname、firstna

在一个JSP中,我有一个JSTL
foreach
编码如下:foreach var=I begin=1 end=rowsremaining。 后来在代码中

   <td class=value align=left valign=top>
      <input name=${i}Last_Name value="<%=Last_Name%> type="text" />
    </td>
问题:为什么我的所有变量lastname、firstname、Address等都设置为null?我的意思是,我可以很容易地猜到,这是因为我所计算的变量不是我希望它能计算到的记录数。前面的第一个jsp的html页面源代码确实显示了输入标记名等于1Last_Name 16Last_Name等。因此,我在第一个jsp中正确计算了值,但在第二个jsp中没有


你知道为什么吗?谢谢。

我对这一行有意见:

<input name=${i}Last_Name value="<%=Last_Name%> type="text" />

JSP EL不在Java代码中计算

scriptlet包含纯Java代码

不要使用scriptlet。使用

${param[i + 'Last_Name']}
而不是

(String)request.getParameter("${i}Last_Name")

可能有更多认可的方法来处理这个问题,但我解决了我的问题,方法是:(1)在输入标记的name属性中保留双引号,并使用记录编号来引用每个记录。例如,-Last_Name和(2)通过以下方式引用发布的参数Last_Name=(String)request.getParameter(Keyvalue+“Last_Name”)

我不太确定如何在jsp中使用它,因为我一直收到上面的无效语法消息。执行您的jsp,发布您得到的完整准确的错误消息,以及导致此错误的代码。说你得到了“无效的语法消息”,而没有说哪条消息和哪条代码是没有帮助的。jsp不会执行。我正在使用ibmrationaldeveloper工具将声明更改为您建议的内容。我显然不理解你的确切建议。我尝试了两件事:Last_Name=${param[I+'Last_Name']};Last_Name=(String)request.getParameter(${param[i+'Last_Name']});对于这两种变体,当我将鼠标悬停在“]}”下出现的红线上时,我会收到此弹出错误消息;令牌上的语法错误(应该是这样的。这应该直接在JSP中使用。而不是在Scriptlet中。必须完全避免Scriptlet。您不需要Scriptlet,因为JSP EL和JSTL可以完成这项工作,而且比Scriptlet做得更好。在Scriptlet中,您只能拥有纯Java代码。而不是JSP EL。在
${}中没有表达式
。这是在我的回答中写的:JSP EL不是在Java代码中计算的。Scriptlet包含纯Java代码。不要使用Scriptlet。你没有抓住我。我的句子的意思是:你不能让表达式在Scriptlet中被${}包围。${}对Java来说没有任何意义。它只能直接在JSP中使用或在JSP标记属性中使用。不能在Scriptlet中使用。当然,您可以在${}中使用EL表达式。顺便说一句,这是您唯一可以拥有的。完全删除您的scriptlet,并使用
所有内容都是双引号,只是不在我编写的初始文本中。Last_Name在jsp中声明为字符串Last_Name=“”;可能有更多经批准的方法来处理此问题,但我通过(1)解决了我的问题在输入标记的name属性中保留双引号,并使用记录编号来引用每个记录-
${param[i + 'Last_Name']}
(String)request.getParameter("${i}Last_Name")