使用JDeveloper,我开始为工作中的项目开发一组网页.由于我当时对JDev了解不多,所以我跑到Oracle去学习一些教程.JDev教程建议使用JSPX而不是JSP,但没有真正解释原因.你在开发JSPX页面吗?你为什么决定这样做?使用JSPX路由的优点/缺点是什么?
在HTML表单中,可以通过在其上定义"disabled"属性来禁用按钮,具有任何值:
<button name="btn1" disabled="disabled">Hello</button>
Run Code Online (Sandbox Code Playgroud)
如果要启用某个按钮,则该属性不应该存在,因为没有定义的值可以将disabled属性设置为启用按钮.
当我想在使用JSP文档(jspx)时启用/禁用按钮时,这会导致我出现问题.由于JSP文档必须是格式良好的XML文档,我无法看到有条件地包含此属性的任何方式,因为以下内容不合法:
<button name="btn1" <%= (isDisabled) ? "disabled" : "" %/> >Hello</button>
Run Code Online (Sandbox Code Playgroud)
虽然我可以使用JSTL if标签复制标签两次以获得所需的效果,但在我的特定情况下,我在按钮上声明了超过15个属性(AJAX的许多javascript事件处理程序属性),因此重复标记将使JSP非常凌乱.
如何在不牺牲JSP可读性的情况下解决这个问题?是否有任何自定义标记可以通过操作输出DOM将属性添加到父级?
尝试使用JSPX创建HTML页面时,您将面临以下困难:
<div class="foo"></div>变得<div class="foo"/>可以被浏览器不同的解释<script...>.<script.../>IE和Firefox无法识别自闭标记.<!DOCTYPE html>)这个问题是对其他一些问题的回应,都归结为同样的问题.我找不到一个全面的答案,所以我发布了我的调查结果.
相关问题:
我们使用jspx作为模板引擎.我们有数十个具有数百个el表达式的屏幕,例如$ {user.firstName}或"$ {mail.subject}"
默认情况下,所有这些HTML代码都不会被转义.如果在字段中存在<或"的东西 - 屏幕将失败.我们总是可以使用fn:escapeXml,但在所有地方这样做真的很无聊.
1)默认情况下是否有办法逃脱?
我知道的唯一方法是破解JSP编译器(如tomcat的jasper).但这不是一条路.
2)为什么某人可能需要在el中使用未转义的HTML?在模板外部存储HTML(例如在数据库中)不是一个好习惯.
3)我确信模板引擎应该自动处理它(就像在XSLT中一样),用户为什么要关心它?手动转义(fn:escapeXml)闻起来像SQL手动转义(用于代替JDBC setParam):样板代码和sql注入的好地方(在我们的例子中是跨站点脚本).
我只需要for在JSF/ICEFaces中执行一个非常基本的循环,基本上是渲染列号
类似下面的伪代码
for(int i=0; i<max; i++)
{
<td>#{i}</td>
}
Run Code Online (Sandbox Code Playgroud)
在<c:forEach>超过集合标记迭代,但我不想让我的支持bean更复杂返回整数的一个愚蠢的集合.
你知道更短更智能的方式吗?
谢谢
我正在Eclipse中创建一个动态Web项目(几乎从头开始),我创建了一个JSPX文件
<head>...
<script type="text/javascript" src="route/to/scripts/jquery.js"></script>
<script type="text/javascript" src="route/to/scripts/jquery.ui.js"></script>
<script type="text/javascript" src="route/to/scripts/something.js"></script>
</head>
Run Code Online (Sandbox Code Playgroud)
我打算使用Jquery UI进行排序,我发现使用JSPX时,只有第一个脚本在Firefox和IE中加载(而在Opera中它可以工作......).如果我使用普通的JSP,无论是HTML的XHTML,它都会加载所有的JS文件.
有没有办法在不使用的情况下成功包含所有JS文件
<script>
<jsp:include ...>
</script>
Run Code Online (Sandbox Code Playgroud)
我必须知道吗?(因为这个加载脚本INTO到最后的(X)HTML)
编辑:只是想...为什么Opera在读取<script>标签时FF和IE失败时读取了xhtml ?它可能是一个错误吗?
我正在尝试编写一个自定义JSPX标记,该标记从给定列表中的每个对象读取给定bean属性的值,该属性的名称作为JSP属性传递给标记.标签看起来像这样:
<jsp:root xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:jsp="http://java.sun.com/JSP/Page"
version="2.0">
<jsp:output omit-xml-declaration="yes"/>
<jsp:directive.attribute name="items" type="java.lang.Iterable"
required="true" description="The items whose properties are to be read"
rtexprvalue="true"/>
<jsp:directive.attribute name="propertyName" type="java.lang.String"
required="true" description="The name of the bean property to read"
rtexprvalue="true"/>
<c:forEach items="${items}" var="item">
<!-- This is the bit that doesn't work -->
<jsp:getProperty name="item" property="${propertyName}" />
</c:forEach>
</jsp:root>
Run Code Online (Sandbox Code Playgroud)
问题是标签的property属性jsp:getProperty似乎不接受表达式,只接受文字值.所以这可行,但对我没用(因为我不知道属性名称,直到运行时):
<jsp:getProperty name="item" property="firstName" />
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
org.apache.jasper.JasperException: org.apache.jasper.JasperException:
PWC6054: Cannot find any information on property '${propertyName}' in
a bean of type 'com.example.FooBar'
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助.
有没有办法在jspx文件中使用jsp scriptlet?<%="hello"%> 在jspx文件中这样写这个给了我错误.请帮忙.
我想在jspx中使用版权符号,但它不允许我使用©.它给我一个错误.
引用了实体"copy",但未声明.
我google了它,发现我需要修改escapeMode.但我不知道应该在哪里改变它.
或者任何人都有解决方案,请告诉我.
我有一个很好地格式化的"JSP文档"("JSP in XML"),当生成网页并发送给用户时,会删除一些换行符.
现在真正奇怪的部分:显然"主".jsp总是删除所有的换行符,但对于主.jsp中包含的任何后续.jsp,换行符似乎是随机删除的(有些是在那里,有些则不是).
例如,如果我正在查看从Firefox提供的网页并要求"查看源代码",我会看到生成的内容.
那么,什么决定了什么时候/如何保留/删除换行符?
这只是我编写的一个例子......你可以强制使用.jsp来实现这个目的:
<body><div id="page"><div id="header"><div class="title">...
Run Code Online (Sandbox Code Playgroud)
或这个:
<body>
<div id="page">
<div id="header">
<div class="title">...
Run Code Online (Sandbox Code Playgroud)
?
我认为删除了换行符以节省带宽,但如果我想保留它们怎么办?如果我想保留与我的.jsp文件中相同的XML缩进怎么办?
这可行吗?
编辑
按照skaffman的建议,我看了一下生成的.java文件,"main"没有很多out.write,但没有一个写标签或换行.与该文件相反,我从主要.jsp中包含的所有内容都有很多行,如:
out.write("\t...\n");
Run Code Online (Sandbox Code Playgroud)
所以我想我的问题保持完全相同:什么决定了输出中包含/删除标签/空格/换行符的方式?