Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jsp设置变量名_Java_Jsp_Scriptlet - Fatal编程技术网

Java jsp设置变量名

Java jsp设置变量名,java,jsp,scriptlet,Java,Jsp,Scriptlet,我一直在寻找如何正确地做到这一点,但找不到一个关于如何处理的明确指南 我知道您不能在标记中使用表达式,但我不确定我打算如何处理它 我已经看到了很多关于这个问题的答案,没有太多的解释或帮助 基本上,我希望下面这样的东西能起作用,但显然不行 <c:forEach items="${dataposition.rows}" var="lineposition" begin="0" varStatus="status"> <c:set var="name_${status.cou

我一直在寻找如何正确地做到这一点,但找不到一个关于如何处理的明确指南

我知道您不能在标记中使用表达式,但我不确定我打算如何处理它

我已经看到了很多关于这个问题的答案,没有太多的解释或帮助

基本上,我希望下面这样的东西能起作用,但显然不行

<c:forEach items="${dataposition.rows}" var="lineposition" begin="0" varStatus="status">
    <c:set var="name_${status.count}" value="${lineposition.value}" scope="session"/>
</c:forEach>

确切的错误消息是

根据标记文件中的TLD或属性durective,属性var 不接受任何表达式“

实现这一目标的正确方法是什么

(我更改了实际代码中的变量名,但希望您仍能理解)

如果我需要创建java对象或其他东西,我对此很满意,但我需要知道如何在项目中包含它们,以及如何在代码中使用它们。类似于列表的东西听起来是对的

我创建了一个对象来保存我的值

<jsp:useBean id="myid" class="myclass" scope="session"/>

我想使用它,但不确定如何使用:

<c:forEach items="${dataposition.rows}" var="lineposition" begin="0" varStatus="status">
    <%
        myid.add_position(lineposition.var1, lineposition.var2, lineposition.var3, lineposition.var4, lineposition.var5);
    %>
</c:forEach>

使用MVC框架将设置数据的代码与显示数据的方式分开是一种理想的方式。如果在呈现JSP之前在服务器上执行任何类型的控制器,那么我建议将逻辑放在那里。除了控制器是准备这类数据的更合适的地方之外,语法几乎肯定会比JSP上的任何东西看起来更干净

如果您没有控制器,并且只使用JSP,那么我建议您编写一个标记来替换。这并不是最干净的方法,但如果JSP是您所坚持的,那么对我来说,这似乎是一个不错的折衷方案(我认为这比Scriptlet和破解JSTL核心TLD以允许在“var”属性中使用表达式要好)。除了TLD可以被写入以允许“var”属性中的表达式之外,它将执行与TLD相同的所有操作

MyTag.java

package example;

import org.apache.taglibs.standard.tag.rt.core.SetTag;

public class MySetTag extends SetTag { }
WEB-INF/my.tld

<taglib>
    <tag>
        <name>set</name>
        <tag-class>example.MySetTag</tag-class>
        <body-content>JSP</body-content>
        <attribute>
            <name>var</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>

        ...
    </tag>
</taglib>

设置
example.MySetTag
JSP
变量
假的
真的
...
rownamer.jsp

<%@ taglib prefix="my" uri="WEB-INF/my.tld"%>
<c:forEach items="${dataposition.rows}" var="lineposition" begin="0" varStatus="status">
    <my:set var="name_${status.count}" value="${lineposition.value}" scope="session"/>
</c:forEach>


我不明白为什么需要使用键
name\u 1
name\u 2
等设置变量,因为您正在迭代所需的值。为什么不在这个
forEach
中只做您想做的事情呢?我在一个jsp页面上,该页面设置会话变量,以便在其他几个页面中使用。此jsp页面从另一个页面中包含,以从数据库中获取数据。如果我的想法全错了,你能建议我怎么调整吗为什么像这样的工作是在JSP级别完成的呢?我被投入到这个项目中,对所有这些都不太确定,我还是这个行业的一名大三学生,这是我第一次接触web内容。您建议我如何从数据库中获取数据并将其存储为会话级别的对象?我可以使用java、html和jsp。我很乐意接受这样的建议:这是否会覆盖其他使用它的人的标签?或者这是我可以自己使用而其他人不必使用的东西吗?…顺便说一句,谢谢你提供了一个令人惊讶的详细答案,我真的很感激。(遗憾的是,我被JSP困住了)这个标签将是一些独立的、新的东西,您可以在项目中使用,但其他人不必这样做。它还保留了原始的c:set>标记,这样您就可以在不需要在“var”属性中添加表达式的任何时候继续使用它。我将在星期二(星期一在德国度假)尝试后接受它。谢谢你的帮助!我突然想到,您甚至不需要编写MyTag类。您只需将.tld文件配置为直接指向org.apache.taglibs.standard.tag.rt.core.SetTag。在我将其他属性以及jsp版本和tlib版本添加到标记文件后,它就可以正常工作。谢谢:)