1

设置:iMac 10.6.8、Apache Tomcat 6.0.16、eXist 数据库、JSP、Java、XML

我有一个 JSP 页面,用于接收用户的关键字请求并返回 XML 内容。

根据返回给用户的标题 XML 标记的内容,我还希望显示从外部 Java 项目中提取的其他内容。

我的 JSP 提取 XML 内容

<div class='result-container'>
<%          
            (more code here to call content from XML database and transform)

            content = AE.getPrettyModelContent("ae", username + "transformedFeatureModel");
            out.println(content);
%>
</div>

此内容与一系列标签一起输出,然后用于样式设置,例如

<title>France</title>

输出为

<div id="title">France</div> 

我希望根据上述输出标签的内容在我的 JSP 页面上执行另一个操作。

到目前为止我的尝试

<div class='concept-container'>
<%

Injector injector = Guice.createInjector(new GuiceInjector());
ConceptConnector myConceptFrance = injector.getInstance(ConceptConnector.class);

if (div id="title" == France)
{
out.println(myConceptFrance.search(myConceptFrance));
} 

%>
</div>

错误

An error occurred at line: 150 in the jsp file: /SimpleResponse2.jsp
div cannot be resolved
149: 
150:    if (div id="title" == France)
151:    {
152:    out.println(myConceptFrance.search(myConceptFrance));
153:    }

我不是 100% 确定我尝试做的事情是可能的,而且似乎没有很多关于它的信息。如果有人可以提供任何提示,将不胜感激。

4

2 回答 2

2

我可能不完全理解这个问题,但基于:if (div id="title" == France)听起来您正在尝试解析和编辑您输出的 HTML,您在此处输出一些 HTML out.println(content);:. 这是不可能的(您无法将输出 HTML 读回 Java中)以下是一些需要考虑的可能解决方法:

  1. 将“内容”保存为变量 java 变量,以便稍后在比较中进一步使用(我会简化它,只保存您想要的数据部分) - 我认为这可能会在缩放时出现问题。
  2. 在将任何内容输出到页面之前,将所有比较和检查都放在同一个代码块中
  3. 使用一些 AJAX 来处理后面的逻辑——(使用 Javascript 来检查页面上的某些功能,并可能调用一个控制器 servlet 来处理它)
  4. 当您想要将某些内容添加到页面时,不要直接使用 out.println() ,而是使用 aStringBuffer或其他内容来保留您正在打印的内容的副本,以便您以后可以搜索它。- 也许(如果您在打印后不需要操作某些内容,则将其out.println写入StringBuffer,然后您可以搜索,见下文:

    public static void main(String[] args){
        StringBuffer sb = new StringBuffer();
        sb.append("<div id=\"additionalData\">Italy</div> <div id=\"title\">France</div> ");
        System.out.println(sb.indexOf("id=\"title\">France</div>") > -1); // output true
        System.out.println(sb.indexOf("id=\"title\">Italy</div>") > -1); // outputs false
    
    }
    

我敢肯定还有其他解决方案,但这就是我能马上想到的。希望这可以帮助。

于 2012-07-11T18:18:25.670 回答
1

使用转换读取 XML,然后使用条件语句和jsp:scriptlet附加指令,如下所示:

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page">
<!--...-->

 <xsl:template match="title">
  <!-- Output div with ID and value-->
  <div id="local-name(.)"><xsl:value-of select="."/></div>
  <!-- Check for France -->
  <xsl:if test="current() = 'France' ">
    <!-- Call instruction using scriptlet -->
    <jsp:scriptlet>out.println(myConceptFrance.search(myConceptFrance));</jsp:scriptlet>
  </xsl:if>
 </xsl:template>

使用mode 属性代替更复杂的逻辑。

于 2012-07-12T00:37:26.607 回答