我们将在JSP/spring-project中为某种模板引擎使用JSTL和自定义JSTL标记.
有没有办法创建一个看起来像这样的标签:
<div id="site">
<div id="header">Some title</div>
<div id="navigation"> SOME DYNAMIC CONTENT HERE </div>
<div id="content"> ${content} </div>
<div id="footer"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
<mytags:template>
<h1>Title</h1>
<p>My content!</p>
</mytags:template>
Run Code Online (Sandbox Code Playgroud)
即在自定义JSTL标记内使用body-content ...
这有效:
<mytags:template content="some content... not HTML" />
Run Code Online (Sandbox Code Playgroud)
但在我们的案例中并不是很有用.
我正在为我的网页设计帮助/提示系统,我想基于jQuery的上下文帮助.
我的想法是,我会在事件上发布请求,并在特殊div中显示给出的repsonse.
我希望得到类似<spring:message>标签的行为,发布消息代码并获取本地化消息的字符串表示.如果它使用相同的资源会很棒.
有没有办法从Controller调用此标记?(这个标签后面有Java代码)或者模仿这个标签控制器端的最佳方法是什么?
我想做这样的事情
<c:forEach var="item1" items="List1" var="item2" items="List2">
<p> ${item1} ${item2}</p>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
一种解决方案是迭代两个List,如果两者具有相同的大小
<c:forEach var="i" begin="0" end="$(fn:length(List1))">
<p> <%= List1.get(i) %> <%= List2.get(i)%> //wrong syntax
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
任何想法如何实现这一点.
我如何获得 JSP 页面的完整 URL。
例如,URL 可能是http://www.example.com/news.do/?language=nl&country=NL
如果我执行以下操作,我总是会得到 news.jsp 而不是 .do
out.print(request.getServletPath());
out.print(request.getRequestURI());
out.print(request.getRequest());
out.print(request.getContextPath());
我正在尝试访问 String[][] 数组的长度属性,但得到了一个NumberFormatException.
我的 JSP 代码
<c:set var="len" value="${Constants.CATEGORIES.length}"/>
<c:forEach var="i" begin="1" end="${len}" step="1" varStatus ="status">
<a class="list-group-item" href="">${Constants.CATEGORIES[i][0]}</a>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
下面是堆栈跟踪
java.lang.NumberFormatException: For input string: "length"
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
java.lang.Integer.parseInt(Integer.java:580)
java.lang.Integer.parseInt(Integer.java:615)
javax.el.ArrayELResolver.coerce(ArrayELResolver.java:151)
javax.el.ArrayELResolver.getValue(ArrayELResolver.java:64)
org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:110)
org.apache.el.parser.AstValue.getValue(AstValue.java:169)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:115)
org.apache.jsp.WEB_002dINF.view.shared.categories_jsp._jspx_meth_c_005fset_005f0(categories_jsp.java:146)
org.apache.jsp.WEB_002dINF.view.shared.categories_jsp._jspService(categories_jsp.java:107)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:934)
org.apache.jsp.WEB_002dINF.view.home.index_jsp._jspService(index_jsp.java:133)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
com.raghavpro.bookhive.controllers.home.IndexServlet.doGet(IndexServlet.java:76)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Run Code Online (Sandbox Code Playgroud)
有什么线索吗?
在尝试使用自定义JSP标记库时,我在JSP中定义了一个变量,我想在传递给标记库之前对其进行评估.但是,我似乎无法让它发挥作用.这是我的JSP的简化版本:
<% int index = 8; %>
<foo:myTag myAttribute="something_<%= index %>"/>
Run Code Online (Sandbox Code Playgroud)
doStartTag()我的方法TagHandler使用pageContext的输出流基于输入的属性进行写入:
public int doStartTag() {
...
out.println("Foo: " + this.myAttribute);
}
Run Code Online (Sandbox Code Playgroud)
但是,我在最终标记中看到的输出是:
Foo: something_<%= index %>
Run Code Online (Sandbox Code Playgroud)
而不是我想要的:
Foo: something_8
Run Code Online (Sandbox Code Playgroud)
我对该属性的标记库定义是:
<attribute>
<name>myAttribute</name>
<required>true</required>
</attribute>
Run Code Online (Sandbox Code Playgroud)
我试图用rtexprvalue两个true和配置属性false,但都没有工作.有没有办法可以配置属性,以便在发送给Handler之前对其进行评估?或者我是否完全错了?
我对JSP标签比较新,所以我愿意接受解决这个问题的替代方案.另外,我意识到在JSP中使用scriptlet是不受欢迎的,但是我在这里使用了一些遗留代码,所以我现在有点困惑.
编辑:
我也尝试过:
<foo:myTag myAttribute="something_${index}"/>
Run Code Online (Sandbox Code Playgroud)
这也不起作用 - 它只是输出something_${index}.
我正在编写一些JSP 2.x标记文件.我现在已经搜索了几个小时,但是我找不到基于jsp的标记文件的doctype/schema定义/ dtds.
有没有人知道是否有dtd/schema文件来减轻编写这些标记文件的痛苦?在eclipse中没有自动完成等等是非常痛苦的.我必须检查我在编写标签时找到的几个教程.
澄清一下:我不是在谈论基于java的标签,也不是在谈论taglib tld文件.我说的是由jsp代码组成的标记文件,通常是结尾的.tag或tagx,它们位于META-INF/tags或WEB-INF/tags中.
提示非常受欢迎
我在这里研究了关于taglib和隐含对象的各种问题.虽然许多答案都提出了有趣的想法,但我找不到直接回答这个问题的答案.
为了说明我的困境,我说有一个实现javax.servlet.jsp.tagext.Tag接口的Java类......
import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
class MyTag implements Tag {
private PageContext _pageContext;
public void setPageContext(PageContext pageContext) {
_pageContext = pageContext;
}
.
.
.
Run Code Online (Sandbox Code Playgroud)
这使我可以访问PageContext对象,该对象提供了有关调用JSP的一些有用信息.问题是,PageContext似乎没有提供对许多JSP的实际隐式对象的访问...
.
.
.
public int doEndTag() throws JspException {
ServletRequest req = _pageContext.getRequest();
.
.
.
return EVAL_PAGE;
}
Run Code Online (Sandbox Code Playgroud)
上面描述的ServletRequest对象与HttpServletRequest完全不同,HttpServletRequest由JSP本身中的隐式对象"request"实现.这使得在我的类中调用像HttpServletRequest.getRequestURI()这样的方便的方法是有问题的.
因此,通过阅读这里的其他几个问题的答案,我留下的印象是,没有开箱即用的方法来获取实际的隐含对象.我要么必须在JSP中明确地将它们作为自定义标记的属性传递...
<mc:mytag request="<%=request%>"/>
Run Code Online (Sandbox Code Playgroud)
......或许它们存储在其他一些隐含对象我的散列做访问...
<% session.setAttribute("request", request); %>
Run Code Online (Sandbox Code Playgroud)
哪个,如果是真的,自然会引出我的问题...... 你是不是在开玩笑吧? 必须有一些我在这里缺少的关键.在我的自定义taglib类中,访问JSP的隐式对象似乎是一件相当普遍的事情.每次我需要这些步骤时都必须采取这些步骤,这让我感到非常愚蠢 - 特别是当我被传递给像我这样可能为他提供的PageContext对象时,但似乎没有.
我真的觉得我在这里缺少一些基本的东西,但我不能为我的生活找出可能的东西.有人可以对此有所了解吗?
我们有列表框.这将显示美国的不同州.我希望状态"LA"应该被预选.但我不知道列表中"LA"的位置.它可能会有所不同.我们正在使用以下脚本.
<select id="state" name="state" title="State" class="js_required prompt_text grid_2" tabindex="5">
<option>State</option>
<s:iterator value="@com.homeservices.action.utils.StateCode@values()">
<option value="<s:property/>"><s:property/></option>
</s:iterator>
</select>
Run Code Online (Sandbox Code Playgroud)
var @ com.homeservices.action.utils.StateCode @ values()给出了一个值列表:
AA
AE
AK
CA
CT
IL
LA
MA
MD
Run Code Online (Sandbox Code Playgroud)
......等等.
有人可以建议如何使洛杉矶成为一个预先选定的州.
我需要在JSP数据存储区查询结果中显示.我获取数据并将它们转发到JSP文件中:
Query query = new Query("oAuth", key);
List<Entity> users = datastore.prepare(query).asList(FetchOptions.Builder.withLimit(5));
try {
// Set the attribute and Forward to hello.jsp
req.setAttribute ("users", users); // to save your temporary calculations.
req.getRequestDispatcher("/sharemarkerusers.jsp").forward(req, resp);
} catch (Exception ex) {
ex.printStackTrace ();
}
Run Code Online (Sandbox Code Playgroud)
这是我的jsp文件的内容
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false" %>
<html>
<body>
<table>
<c:forEach items="${users}" var="user">
<tr>
<td>${user.userEmail}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但是我得到了结果:在com.google.appengine.api.datastore.Entity类中找不到属性userEmail
好吧,当我在单元格中显示只是用户变量时,它实际显示:
<html>
<body>
<table>
<tr>
<td><Entity [oAuth("******")/oAuth("*********")]:
accessToken = ***********
accessTokenSecret …Run Code Online (Sandbox Code Playgroud)