首先,我正在使用
Mojarra 2.0.4
Glassfish v.3.0.1
Primeface primefaces-2.2-1.jar
因此,我有一个简单的页面,它将尝试裁剪图像,当我尝试单击commandButton调用裁剪操作时,在更新我的
Conversion Error Occur
消息时得到了growl
。这是我的代码<p:growl id="msgs" showDetail="true"/>
<h:form>
<table cellspacing="10">
<tr>
<td>
<p:imageCropper value="#{CropImage.croppedImage}" image="#{CropImage.me.profilePic}"
initialCoords="225,75,500" aspectRatio="1.25" />
</td>
<td style="vertical-align: top;">
<h:outputText value="My Thumb Nail" styleClass="labelText"/><br/>
<p:graphicImage value="#{CropImage.imageName}" styleClass="icon"/><br/><br/>
<p:commandButton value="Crop" actionListener="#{CropImage.crop}" update="msgs"/>
</td>
</tr>
</table>
</h:form>
这是我的豆子
@ManagedBean(name="CropImage")
@ViewScoped
public class CropImage {
@ManagedProperty(value="#{SessionBean}")
private SessionBean sessionBean;
private User me;
private CroppedImage croppedImage;
private String imageName;
private String ext;
private static final Logger logger = Logger.getLogger(CropImage.class.getName());
public CropImage() {
}
@PostConstruct
public void init(){
me = sessionBean.getMe();
imageName = me.getProfilePic();
//obtain the extension
ext = imageName.substring(imageName.lastIndexOf("."), imageName.length());
}
public String getImageName() {
return imageName;
}
public void setImageName(String imageName) {
this.imageName = imageName;
}
public SessionBean getSessionBean() {
return sessionBean;
}
public void setSessionBean(SessionBean sessionBean) {
this.sessionBean = sessionBean;
}
public User getMe() {
return me;
}
public void setMe(User me) {
this.me = me;
}
public CroppedImage getCroppedImage() {
return croppedImage;
}
public void setCroppedImage(CroppedImage croppedImage) {
this.croppedImage = croppedImage;
}
public String crop(){
ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
UUID uuid = UUID.randomUUID();
imageName = servletContext.getInitParameter("resources") + File.separator;
imageName += "cropped" + File.separator + uuid.toString() + ext;
FileImageOutputStream imageOutput;
try {
imageOutput = new FileImageOutputStream(new File(imageName));
imageOutput.write(croppedImage.getBytes(), 0, croppedImage.getBytes().length);
imageOutput.close();
} catch (FileNotFoundException e) {
logger.log(Level.SEVERE, e.getMessage());
} catch (IOException e) {
logger.log(Level.SEVERE, e.getMessage());
}
return null;
}
}
最佳答案
您要裁剪的图像是否显示?<p:imageCropper>
的图像属性必须是图像的相对路径。
从PrimeFaces文档中:
对于本地图像,始终使用ImageCropper
要求图像路径是上下文
相对的。所以简单地做到这一点
只需添加斜杠(“ /path/to/image.png”)
然后imagecropper会在
%WEBAPP_ROOT%/ path / to / image.png。
操作网址相对本地图像是
不支持。