Java Struts2<;迭代器>;随机复制值
使用的技术:Struts2、JPA(EclipseLink)、ApacheDerby数据库 我的项目位于映像宿主上,我已将Java Struts2<;迭代器>;随机复制值,java,jpa,struts2,eclipselink,derby,Java,Jpa,Struts2,Eclipselink,Derby,使用的技术:Struts2、JPA(EclipseLink)、ApacheDerby数据库 我的项目位于映像宿主上,我已将UserEntity(父项)配置为包含对ImageEntity的引用 我有一个名为userEntity的会话变量,它是登录时获取的用户对象。JSP页面myUploads.JSP使用用户对象中的列表并显示所有值。我已经使用struts迭代器标记来循环列表 问题: 通过随机复制行 注意:我已经检查了数据库,它没有重复,可以观察到重复的条目共享相同的图像ID JSP代码: <
UserEntity
(父项)配置为包含对ImageEntity
的引用
我有一个名为userEntity
的会话变量,它是登录时获取的用户对象。JSP页面myUploads.JSP
使用用户对象中的列表并显示所有值。我已经使用struts迭代器标记
来循环列表
问题:
通过
随机复制行
注意:我已经检查了数据库,它没有重复,可以观察到重复的条目共享相同的图像ID
JSP代码:
<table border="1">
<thead>
<tr>
<th>Name</th>
<th>Comments</th>
<th>Link</th>
<th>Image</th>
<th>Delete image</th>
<th>Share details</th>
</tr>
</thead>
<tbody>
<s:iterator value="#session.userEntity.images" var="image">
<s:url id="imageURL" action="myUploads" >
<s:param name="imageID" value="#image.id"></s:param>
</s:url>
<s:url id="deleteImageURL" action="deleteImage" method="deleteImage">
<s:param name="imageID" value="#image.id"></s:param>
</s:url>
<tr>
<td><s:property value="#image.name"/></td>
<td><s:property value="#image.comments"/></td>
<td><s:a href="%{imageURL}" cssClass="linkStyle">
<s:property value="#image.imageName"/>
</s:a></td>
<td>
<s:a href="%{imageURL}" cssClass="linkStyle"> <img width="200" height="200" src="<s:url action='ImageAction'><s:param name='imageID' value="#image.id"></s:param></s:url>" /> </s:a></td>
<td>
<s:a href="%{deleteImageURL}" cssClass="linkStyle">
Delete
</s:a> </td>
<td>
<s:if test="%{#image.shares != null}">
<ul>
<s:iterator value="#image.shares" var="share">
<li><s:property value="#share.fullName"/></li>
</s:iterator>
</ul>
</s:if>
</td>
</tr>
</s:iterator>
</tbody>
</table>
<table border="1">
<thead>
<tr>
<th>Name</th>
<th>Comments</th>
<th>Link</th>
<th>Image</th>
<th>Delete image</th>
<th>Share details</th>
</tr>
</thead>
<tbody>
ROW 1 : imageID=151
<tr>
<td>sun</td>
<td>sun set</td>
<td><a href="/ImageHosting5.7/myUploads.action?imageID=151" class="linkStyle">
Sunset.jpg
</a></td>
<td>
<a href="/ImageHosting5.7/myUploads.action?imageID=151" class="linkStyle"> <img width="200" height="200" src="/ImageHosting5.7/ImageAction.action?imageID=151" /> </a></td>
<td>
<a href="/ImageHosting5.7/deleteImage!deleteImage.action?imageID=151" class="linkStyle">
Delete
</a> </td>
<td>
<ul>
<li>b</li>
</ul>
</td>
</tr>
ROW 2 : imageID=151
<tr>
<td>sun</td>
<td>sun set</td>
<td><a href="/ImageHosting5.7/myUploads.action?imageID=151" class="linkStyle">
Sunset.jpg
</a></td>
<td>
<a href="/ImageHosting5.7/myUploads.action?imageID=151" class="linkStyle"> <img width="200" height="200" src="/ImageHosting5.7/ImageAction.action?imageID=151" /> </a></td>
<td>
<a href="/ImageHosting5.7/deleteImage!deleteImage.action?imageID=151" class="linkStyle">
Delete
</a> </td>
<td>
<ul>
<li>b</li>
</ul>
</td>
</tr>
</tbody>
</table>
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id; --------> UNIQUE
private String name;
private String comments;
@ManyToOne
private UserEntity userEntity;
private String imagePath;
private String imageName;
@ManyToMany(cascade = CascadeType.MERGE)
private List<UserEntity> shares; // list of owner IDs
private Boolean publicShare; // isShared
private boolean addImage()
{
DatabaseService db;
try {
db = new DatabaseService();
// get userEntity from session
Map sessionMap = ActionContext.getContext().getSession();
userEntity = (UserEntity) sessionMap.get("userEntity");
// save image to file system
String filePath = servletRequest.getSession().getServletContext().getRealPath("/images");
File fileToCreate = new File(filePath, this.uploadFileFileName);
FileUtils.copyFile(this.uploadFile, fileToCreate);
// make imageEntity
imageEntity = new ImageEntity();
imageEntity.setName(name);
imageEntity.setComments(comments);
imageEntity.setUserEntity(userEntity);
try {
if(!userShare.isEmpty())
imageEntity.setShares(new DatabaseService().findUserEntitysByUsernames(users));
} catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
}
imageEntity.setImagePath(fileToCreate.getAbsolutePath());
imageEntity.setImageName(fileToCreate.getName());
db.persist(imageEntity);
userEntity.addToImages(imageEntity);
// update userEntity
userEntity = (UserEntity) db.merge(userEntity);
// update sessionMap
sessionMap.put("userEntity", userEntity);
// notify share
if( ! imageEntity.getShares().isEmpty())
{
// init mail
SendMailService sendMailService = new SendMailService();
sendMailService.setBody("Image is shared with you");
sendMailService.setSubject("DJVT IMAGE HOSTING");
for (UserEntity ue : imageEntity.getShares()) {
sendMailService.setTo(ue.getEmailid());
}
sendMailService.sendMail();
}
} catch (Exception e) {
throw new RuntimeException("img upload failed" + e.toString());
}
return true; // success
}
图像的实体类:
<table border="1">
<thead>
<tr>
<th>Name</th>
<th>Comments</th>
<th>Link</th>
<th>Image</th>
<th>Delete image</th>
<th>Share details</th>
</tr>
</thead>
<tbody>
<s:iterator value="#session.userEntity.images" var="image">
<s:url id="imageURL" action="myUploads" >
<s:param name="imageID" value="#image.id"></s:param>
</s:url>
<s:url id="deleteImageURL" action="deleteImage" method="deleteImage">
<s:param name="imageID" value="#image.id"></s:param>
</s:url>
<tr>
<td><s:property value="#image.name"/></td>
<td><s:property value="#image.comments"/></td>
<td><s:a href="%{imageURL}" cssClass="linkStyle">
<s:property value="#image.imageName"/>
</s:a></td>
<td>
<s:a href="%{imageURL}" cssClass="linkStyle"> <img width="200" height="200" src="<s:url action='ImageAction'><s:param name='imageID' value="#image.id"></s:param></s:url>" /> </s:a></td>
<td>
<s:a href="%{deleteImageURL}" cssClass="linkStyle">
Delete
</s:a> </td>
<td>
<s:if test="%{#image.shares != null}">
<ul>
<s:iterator value="#image.shares" var="share">
<li><s:property value="#share.fullName"/></li>
</s:iterator>
</ul>
</s:if>
</td>
</tr>
</s:iterator>
</tbody>
</table>
<table border="1">
<thead>
<tr>
<th>Name</th>
<th>Comments</th>
<th>Link</th>
<th>Image</th>
<th>Delete image</th>
<th>Share details</th>
</tr>
</thead>
<tbody>
ROW 1 : imageID=151
<tr>
<td>sun</td>
<td>sun set</td>
<td><a href="/ImageHosting5.7/myUploads.action?imageID=151" class="linkStyle">
Sunset.jpg
</a></td>
<td>
<a href="/ImageHosting5.7/myUploads.action?imageID=151" class="linkStyle"> <img width="200" height="200" src="/ImageHosting5.7/ImageAction.action?imageID=151" /> </a></td>
<td>
<a href="/ImageHosting5.7/deleteImage!deleteImage.action?imageID=151" class="linkStyle">
Delete
</a> </td>
<td>
<ul>
<li>b</li>
</ul>
</td>
</tr>
ROW 2 : imageID=151
<tr>
<td>sun</td>
<td>sun set</td>
<td><a href="/ImageHosting5.7/myUploads.action?imageID=151" class="linkStyle">
Sunset.jpg
</a></td>
<td>
<a href="/ImageHosting5.7/myUploads.action?imageID=151" class="linkStyle"> <img width="200" height="200" src="/ImageHosting5.7/ImageAction.action?imageID=151" /> </a></td>
<td>
<a href="/ImageHosting5.7/deleteImage!deleteImage.action?imageID=151" class="linkStyle">
Delete
</a> </td>
<td>
<ul>
<li>b</li>
</ul>
</td>
</tr>
</tbody>
</table>
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id; --------> UNIQUE
private String name;
private String comments;
@ManyToOne
private UserEntity userEntity;
private String imagePath;
private String imageName;
@ManyToMany(cascade = CascadeType.MERGE)
private List<UserEntity> shares; // list of owner IDs
private Boolean publicShare; // isShared
private boolean addImage()
{
DatabaseService db;
try {
db = new DatabaseService();
// get userEntity from session
Map sessionMap = ActionContext.getContext().getSession();
userEntity = (UserEntity) sessionMap.get("userEntity");
// save image to file system
String filePath = servletRequest.getSession().getServletContext().getRealPath("/images");
File fileToCreate = new File(filePath, this.uploadFileFileName);
FileUtils.copyFile(this.uploadFile, fileToCreate);
// make imageEntity
imageEntity = new ImageEntity();
imageEntity.setName(name);
imageEntity.setComments(comments);
imageEntity.setUserEntity(userEntity);
try {
if(!userShare.isEmpty())
imageEntity.setShares(new DatabaseService().findUserEntitysByUsernames(users));
} catch (Exception e) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
}
imageEntity.setImagePath(fileToCreate.getAbsolutePath());
imageEntity.setImageName(fileToCreate.getName());
db.persist(imageEntity);
userEntity.addToImages(imageEntity);
// update userEntity
userEntity = (UserEntity) db.merge(userEntity);
// update sessionMap
sessionMap.put("userEntity", userEntity);
// notify share
if( ! imageEntity.getShares().isEmpty())
{
// init mail
SendMailService sendMailService = new SendMailService();
sendMailService.setBody("Image is shared with you");
sendMailService.setSubject("DJVT IMAGE HOSTING");
for (UserEntity ue : imageEntity.getShares()) {
sendMailService.setTo(ue.getEmailid());
}
sendMailService.sendMail();
}
} catch (Exception e) {
throw new RuntimeException("img upload failed" + e.toString());
}
return true; // success
}
我该如何解决我的错误,顺便问一下,你对这个错误有什么看法(如果我犯了愚蠢的错误,也有错误)
我登出并登录到我的应用程序,复制一次就消失了
我如何解决我的错误,顺便问一下,你的看法是什么
此错误(如果我犯了愚蠢的错误,则为错误)
共享会话中迭代的集合时出现的问题。因此,其他操作可能会在执行结果之前更新此集合。要检查这一点,您可以在方法中检查重复项。确保堆栈上有替换工作流的
拦截器
如果将默认主题更改为
<constant name="struts.ui.theme" value="simple"/>
在
struts.xml
或使用css\u xhtml
主题中。向我们展示操作、返回到客户端的对象,以及在将数据发送到视图之前为证明没有任何重复而进行的测试。my session变量中存在一些问题。。如果没有更多信息,我会正确检查并返回。这将无法提供帮助。我已登录到我的应用程序,并且有一次复制消失了。。我自己也感到困惑:(如果您使用连接,可能是数据库查询的问题,在这种情况下,将有重复的条目