嗨,在我的 jsp 页面中,我正在测试一个条件
<jsp:scriptlet>
if (session.getAttribute("empid") != null && session.getAttribute("empid") != "")
{
.......
}
但我收到编译器错误。
实体名称必须紧跟实体引用中的“&”。
任何机构都知道如何解决这个问题?
答案取决于您使用的 JSP 页面的类型。
如果您使用普通的 JSP 页面,您可以选择替换<jsp:scriptlet>
标签<% %>
或转义所有 XML 实体(如&
as&
或<
as <
)。
但是,如果您使用的是 JSPX(也称为 JSP 文档),那么您唯一的选择就是转义 XML 实体。
“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 有效的。"
使用常规 javascript,您可以在 JS 周围包装以下内容:
//<![CDATA[.... //]]>
试一试。