在JSP页面上显示链接图像时出错

时间:2014-04-11 15:33:14

标签: java jsp tiles

我有一个使用嵌入式jetty作为独立运行的java Web应用程序。当在带有Java 7的Mac OS X上运行时,它完全按预期工作。但是,当使用Java 7在Windows 7上使用相同的启动命令运行时,其中一个JSP页面存在问题。以下是JSP页面的相关部分:

<nested:notEmpty property="filesList">
    <nested:iterate property="filesList" indexId="i">
        <tr>
            <td>
                <nested:write property="name"/>
            </td>
            <td>
                <nested:write property="description"/>
            </td>
            <td>
                <a href="javascript:viewHydrationFile('hydrationOperations(<%=operationName%>).filesList[<%=i%>]','show-hydration-file-content_<%=ind%>_<%=i%>','to-reload');" id="show-hydration-file-content_<%=ind%>_<%=i%>">Show</a>
                <nested:link action="/my-files/downloadHydrationFile.do" property="linkParameters">Export</nested:link>
                <nested:hidden property="viewContent" />
                <nested:equal property="viewContent" value="true">    
                    <nested:equal property="type" value="poredist">
                        <nested:define id="poredistName" property="poredistName" />
                        <div id="hydration-file-content_<%=ind%>_<%=i%>" class="to-reload file-poredist"><img src="/vcctl/image/<%=poredistName%>" /></div>
                    </nested:equal>
                   <nested:equal property="type" value="image">
                        <nested:define id="sliceName" property="sliceName" />
                        <div id="hydration-file-content_<%=ind%>_<%=i%>" class="to-reload file-image"><nested:link action="/my-files/viewImage.do" target="_blank" property="linkParameters"><img src="/vcctl/image/<%=sliceName%>" /></nested:link></div>
                    </nested:equal>
                </nested:equal>
                <nested:equal property="viewContent" value="false">
                    <nested:equal property="type" value="poredist">
                       <div id="hydration-file-content_<%=ind%>_<%=i%>" class="to-reload file-poredist"></div>
                   </nested:equal>
                   <nested:equal property="type" value="image">
                       <div id="hydration-file-content_<%=ind%>_<%=i%>" class="to-reload file-image"></div>
                   </nested:equal>
               </nested:equal>
           </td>
       </tr>
   </nested:iterate>
</nested:notEmpty>

我意识到这里有一个javascript函数调用,但它非常通用,调用一个获取png图像的java Action。我很乐意发布javascript函数和java Action,如果这样会有所帮助。

&#34;图像&#34;即使在Windows上,文件也能正常工作它将显示图像,我可以隐藏它,然后按预期重新显示它。问题出在&#34; poredist&#34; section,它将显示正确的png图像一次,并在java控制台上显示以下消息:

INFO: Tiles process complete; forward to /my-files/my-hydration-files.jsp
Apr 11, 2014 10:30:03 AM org.apache.struts.tiles.commands.TilesPreProcessor exec
ute

但是,如果我然后隐藏此png文件并尝试再次显示它,图像将被破坏并且控制台上会显示以下消息:

INFO: Tiles process complete; forward to /my-files/my-hydration-files.jsp
C:\Users\bullard\AppData\Local\Temp\jetty-0.0.0.0-8080-vcctl.war-_vcctl-any-4877
14299336733721.dir\webapp\image\HydrationOf-TestPaste.img.25.000.poredist.png (T
he requested operation cannot be performed on a file with a user-mapped section
open)

我不理解这最后一个错误,并且无法通过网络搜索找到它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

负责制作文件的java代码试图删除该文件(如果已经存在)然后重新制作它。错误发生在刚删除的文件尝试重新打开为新文件的位置。修改java只是返回文件名(如果它已经存在)可以修复问题,我认为无论如何都是更好的编码实践。

至于为什么它之前在Mac上工作但不在Windows上工作,雅虎上的以下文章提供了答案:https://answers.yahoo.com/question/index?qid=20090927164148AAOdJmE