1

嗨,在我的 jsp 页面中,我正在测试一个条件

<jsp:scriptlet>

  if (session.getAttribute("empid") != null && session.getAttribute("empid") != "")
{
.......
}

但我收到编译器错误。

实体名称必须紧跟实体引用中的“&”。

任何机构都知道如何解决这个问题?

4

3 回答 3

2

答案取决于您使用的 JSP 页面的类型。

如果您使用普通的 JSP 页面,您可以选择替换<jsp:scriptlet>标签<% %>或转义所有 XML 实体(如&as&amp;<as &lt;)。

但是,如果您使用的是 JSPX(也称为 JSP 文档),那么您唯一的选择就是转义 XML 实体。

于 2011-04-17T12:29:45.270 回答
1

“Facelets 是一种基于 XML 的视图技术,它使用 XHTML+XML 来生成 HTML 输出。XML 有五个特殊字符,由 XML 解析器进行特殊处理:

<标签的开始。

标签的结尾。" 属性值的开始和结束。 ' 属性值的替代开始和结束。 & 实体的开始(以 ; 结尾)。 如果 & 后面没有 # (例如或),则XML 解析器隐式查找预定义的实体名称之一,例如 lt、gt、amp 等。但是,在您的特定情况下,您使用 & 作为 JavaScript 运算符,而不是 XML 实体。这完全解释了 XML 解析你得到的错误:

实体名称必须紧跟实体引用中的“&”

本质上,您在错误的地方编写 JavaScript 代码,一个 XML 文档而不是 JS 文件,因此您应该相应地转义所有 XML 特殊字符。& 必须转义为 &。

因此,在您的特定情况下,

if (session.getAttribute("empid") != null && session.getAttribute("empid") 必须变成

if (session.getAttribute("empid") != null && session.getAttribute("empid") 使其成为 XML 有效的。"

取自实体名称必须紧跟在实体引用中的“&”之后

于 2013-09-30T14:35:24.033 回答
1

使用常规 javascript,您可以在 JS 周围包装以下内容: //<![CDATA[.... //]]>

试一试。

于 2019-11-15T14:40:20.423 回答