我在尝试运行JSP时遇到以下错误.我正在使用Tomcat 6.0.18,我想使用最新版本的JSTL.
我应该使用什么版本的JSTL,哪个URL与哪个版本的JSTL一起使用?
我收到了这个错误
"根据标记文件中的TLD或属性指令,属性键不接受任何表达式"
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
Run Code Online (Sandbox Code Playgroud)
我只是说我有这个工作,但我想在jar文件中切换具有TLD文件的JSTL jar文件.(而不是必须在Web应用程序中的某处部署它们并在web.xml中定义引用).
Grails 1.1.我的自定义标签:
class MyTagLib {
static namespace 'ct'
def textField = {attrs ->
def bean = attrs.remove('bean')
def field = attrs.remove('field')
attrs.name = field
out << render(template:"/templates/textField", model:[
required: !bean.constraints[field].nullable,
display : bean["${bean.trainingExperience.type}"][field],
theTag : g.textField(name : field, value : bean[field]),
value : bean[field]
])
}
Run Code Online (Sandbox Code Playgroud)
几乎所有我看到的taglib单元测试
AssertEquals "Some String", taglib.out.toString()
Run Code Online (Sandbox Code Playgroud)
是否可以测试正确的模板是否使用模型中的正确值进行渲染?
MyTagLibTests
public class CareertracTagLibTests extends TagLibUnitTestCase{
protected void setUp() {
super.setUp()
mockTagLib(FormTagLib)
mockTagLib(RenderTagLib)
def g = new FormTagLib() // interpret "g" namespace as instances of FormTagLib
tagLib.metaClass.g = …Run Code Online (Sandbox Code Playgroud) 有没有办法找出正在评估的当前视图(或gsp文件)?
由于URL映射和转发,RequestURI不起作用.
我正在尝试根据当前的GSP文件动态检索资源.例如,如果正在执行product/view.gsp,我想要包含product/view.css和product/view.js(如果它们存在).我遇到问题的部分是获取文本"视图"
我们正在构建一个JSP Web应用程序,它在Apache Felix OSGi容器内运行(Web应用程序本身是一个OSGi Bundle).现在,我们面临以下问题:
根据JSP 2.0规范,TLD(taglib描述符)不再需要驻留在Web应用程序WEB-INF文件夹中,而是直接从taglib的jar META-INF文件夹加载.这个taglib jar通常驻留在web应用程序WEB-INF/lib文件夹中,但因为它们是OSGi包,所以它们由Felix加载.
在taglib的OSGi信息中,我们确实导入了所有需要的包.那里的任何人都知道如何告诉servlet,在加载的OSGi Bundles中搜索TLD?
谢谢你的帮助!
我编写了一个taglib,它执行一些逻辑并将一些数据编译成HTML.当我在视图中使用taglib时,taglib期望在视图的相对子文件夹中找到模板.有没有一种方法可以让taglib从公共文件夹中获取模板,例如视图中的布局/文件夹.这就是taglib代码的外观:
class IconifiedTextTagLib {
def renderIconText = { attrs, body ->
//some processing logic to generate the modelMap
out << render(template:"taglibTemplates/iconText", model:modelMap)
}
}
Run Code Online (Sandbox Code Playgroud)
当我<g:renderIconText />在名为A的控制器中使用标签时,它期望taglibTemplates/iconText出现在views/A /文件夹中.这是一个问题,因为我需要能够从多个控制器中使用它.我需要一种方法将模板放在像layouts /这样的文件夹中,以便可以在所有视图中使用它.有关如何做到这一点的任何想法?
我用Spring MVC,JSP和Tyles创建了一个自定义标记库,所以我有几个.tagx文件.在新项目中,我决定尝试Spring Boot和Thymelaf,但我想保留我的自定义库......
如果可以使用thymleaf创建自定义标记库,那么你呢?或者,我是否可以以任何方式导入自定义标记库?
编辑
我添加一些代码以便更清楚.以下使用的标签是我的自定义标签.所以我把JSP包含在里面xmlns:form="urn:jsptagdir:/WEB-INF/tags/form"
<form:create id="fu_utente" modelAttribute="utente" path="/utente">
<div class="row">
<div class="col-md-12 text-center">
<h1 class="fa fa-user-plus" style="color:green;"><b>  Stai creando un nuovo utente di tipo: <var class="varFont"> ${utente.ruolo}</var></b></h1>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-4 col-md-offset-2">
<field:input field="nome" id="c_utente_nome" required="true"/>
</div>
<div class="col-xs-12 col-sm-12 col-md-4">
<field:input field="userName" id="c_utente_username" min="5" max="15" required="true"/>
</div>
<div class="col-xs-12 col-sm-12 col-md-8 col-md-offset-2">
<field:input field="email" id="c_Utente_email" required="true" validationRegex="^[a-z0-9_\+-]+(\.[a-z0-9_\+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,4})$"/>
</div>
<div class="col-xs-12 col-sm-12 col-md-4 col-md-offset-2">
<field:input field="nuovaPassword" id="c_utente_password" min="6" max="15" required="true" type="password"/>
</div>
<div …Run Code Online (Sandbox Code Playgroud) 在启动时,Tomcat递归扫描WEB-INF目录中的TLD(标记库描述符)文件.因此,如果webapp在该目录下有很多文件,则会降低启动过程的速度.有没有人知道在这种情况下是否有办法完全关闭扫描,或者至少提供一个过滤器来缩小搜索范围?
说我有我的自定义taglib:
<%@ taglib uri="http://foo.bar/mytaglib" prefix="mytaglib"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<mytaglib:doSomething>
Test
</mytaglib:doSomething>
Run Code Online (Sandbox Code Playgroud)
在taglib类中,我需要处理一个模板并告诉JSP重新评估它的输出,例如,如果我有这个:
public class MyTaglib extends SimpleTagSupport {
@Override public void doTag() throws JspException, IOException {
getJspContext().getOut().println("<c:out value=\"My enclosed tag\"/>");
getJspBody().invoke(null);
}
}
Run Code Online (Sandbox Code Playgroud)
我的输出是:
<c:out value="My enclosed tag"/>
Test
Run Code Online (Sandbox Code Playgroud)
当我真的需要输出这个:
My enclosed tag
Test
Run Code Online (Sandbox Code Playgroud)
这可行吗?怎么样?
谢谢.
我在Qt项目中编译和使用TagLib 1.6.3非常困难.我已经尝试了所有我能想到的东西.TagLib声称它是通过CMake支持的,但我没有运气.此外,我对我的Qt库甚至需要什么类型的文件感到困惑!
我已经构建了*.a文件,*.lib和*.dll.从我到目前为止的理解...我相信,因为我在Windows*.lib工作是我想要的.无论我做什么,我总是在我尝试编译我的Qt项目时尝试使用的任何TagLib函数的"未定义引用".我已经尝试过MinGW32,MSYS,Visual Studio 2008,甚至可以在Linux上对Windows进行交叉编译.一切都没事.
对我来说更不合理的是,如果我用Mac上的Qt编译相同的TagLib源代码(我认为是g ++?)它运行正常!在我的Windows编译过程中,我必须出错.我一直在我的桌子上砸我的脸大约30(开和关)小时试图解决这个问题.
由于Qt使用minGW,我必须使用相同的编译器编译TagLib吗?
如果我用Visual Studio编译*.lib是不兼容的?
*.a库甚至可以在Windows中使用吗?(假设minGW)
我仍然试图掌握这些C++的东西,但在阅读了无数的论坛帖子和其他问题之后,我仍然很短暂.以下是我目前在CMake工作的内容......
cmake -G "MinGW Makefiles" -DENABLE_STATIC=ON -DHAVE_ZLIB=0 -DWITH_MP4=1 -DMAKE_TAGLIB_LIB=1
cmake --build ./
Run Code Online (Sandbox Code Playgroud)
这会生成一个大小约为2MB的*.a文件.Mac上的工作库大约为3MB,而Visual Studio中的*.lib在发布模式下大约为4MB.请有人救我脱离这个C++跨平台命令行疯狂,因为我在我的智慧结束.我甚至可能会付钱给你一些%!$#&ing库.谢谢.
我想在spring-mvc应用程序中的自定义taglibs中使用spring-beans.原因TagLib-Instances不是由spring实例化的,我不能使用dependnecy-injection.
我的下一个想法是通过拦截器将spring-context添加到请求中,并从tag-class中的请求中获取它.
有没有更好的方法在taglibs中使用spring?春天有什么东西可以随时使用吗?如果spring-mvc中还没有customtag-support,是否有办法用依赖项填充现有对象?
public class MyTag extends TagSupport {
@Autowired
private MyObject object;
public void setMyObject(MyObject myObject) {
this.myObject = myObject;
}
public int doEndTag() {
ApplicationContext context = request.getAttribute("context");
context.populate(this);
return object.doStuff();
}
}
Run Code Online (Sandbox Code Playgroud)