gpt4 book ai didi

java - Wicket:使用 setResponsePage 重定向到 wicket 页面

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:31:01 27 4
gpt4 key购买 nike

我有一个 wicket 页面,其中有一个链接 ADD PRODUCT。单击链接后,会打开一个包含产品信息的模式窗口。

ProductAddPanel.java

public class ProductAddPanel extends Panel {

private InlineFrame uploadIFrame = null;
private ModalWindow window;
private Merchant merchant;
private Page redirectPage;
private List<Component> refreshables;

public ProductAddPanel(String id,final Merchant mct,ModalWindow window,List<Component> refreshables,Page p) {
super(id);
this.window = window;
merchant = mct;
redirectPage = p;
this.refreshables = refreshables;
setOutputMarkupId(true);
}

@Override
protected void onBeforeRender() {
super.onBeforeRender();
if (uploadIFrame == null) {
// the iframe should be attached to a page to be able to get its pagemap,
// that's why i'm adding it in onBeforRender
addUploadIFrame();
}
}


// Create the iframe containing the upload widget
private void addUploadIFrame() {
IPageLink iFrameLink = new IPageLink() {
@Override
public Page getPage() {
return new UploadIFrame(window,merchant,redirectPage,refreshables) {
@Override
protected String getOnUploadedCallback() {
return "onUpload_" + ProductAddPanel.this.getMarkupId();
}


};
}
@Override
public Class<UploadIFrame> getPageIdentity() {
return UploadIFrame.class;
}
};
uploadIFrame = new InlineFrame("upload", iFrameLink);
add(uploadIFrame);
}

ProductAddPanel.html

<wicket:panel>
<iframe wicket:id="upload" frameborder="0"style="height: 600px; width: 475px;overflow: hidden"></iframe>
</wicket:panel>

我正在使用 Iframe 上传图片。我已将 iframe 添加到我的 ProductPanel.html。因为无法使用 ajax 提交上传文件。

上传Iframe.java

protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
DynamicImage imageEntry = new DynamicImage();

if(uploadField.getFileUpload() != null && uploadField.getFileUpload().getClientFileName() != null){
FileUpload upload = uploadField.getFileUpload();
String ct = upload.getContentType();

if (!imgctypes.containsKey(ct)) {
hasError = true;
}

if(upload.getSize() > maximagesize){
hasError = true;
}

if(hasError == false){
System.out.println("######################## Image can be uploaded ################");
imageEntry.setContentType(upload.getContentType());
imageEntry.setImageName(upload.getClientFileName());
imageEntry.setImageSize(upload.getSize());
if(imageEntry != null){
try {
save(imageEntry,upload.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
}else{
target.appendJavaScript("$().toastmessage('showNoticeToast','Please select a valid image!!')");
System.out.println("#################### Error in image uploading ###################");
}
}else{
System.out.println("########################### Image not Selected #####################");
}

MerchantProduct mp =new MerchantProduct();
Product p = new Product();
Date d=new Date();
try {

p.setProductImage(imageEntry.getImageName());
mp.setProduct(p);

Ebean.save(mp);


} catch (Exception e) {
e.printStackTrace();
}

for(Component r: refreshables){
target.add(r);
}

window.close(target);
setResponsePage(MerchantProductPage.class);
}

public void save(DynamicImage imageEntry, InputStream imageStream) throws IOException{
//Read the image data
ByteArrayOutputStream baos = new ByteArrayOutputStream();
copy(imageStream,baos);
baos.close();
byte [] imageData = baos.toByteArray();
baos = null;

//Get the image suffix
String suffix = null;
if("image/gif".equalsIgnoreCase(imageEntry.getContentType())){
suffix = ".gif";
}else if ("image/jpeg".equalsIgnoreCase(imageEntry.getContentType())) {
suffix = ".jpeg";
} else if ("image/png".equalsIgnoreCase(imageEntry.getContentType())) {
suffix = ".png";
}

// Create a unique name for the file in the image directory and
// write the image data into it.
File newFile = createImageFile(suffix);
OutputStream outStream = new FileOutputStream(newFile);
outStream.write(imageData);
outStream.close();
imageEntry.setImageName(newFile.getAbsolutePath());

}

//copy data from src to dst
private void copy(InputStream source, OutputStream destination) throws IOException{
try {
// Transfer bytes from source to destination
byte[] buf = new byte[1024];
int len;
while ((len = source.read(buf)) > 0) {
destination.write(buf, 0, len);
}
source.close();
destination.close();
if (logger.isDebugEnabled()) {
logger.debug("Copying image...");
}
} catch (IOException ioe) {
logger.error(ioe);
throw ioe;
}
}

private File createImageFile(String suffix){
UUID uuid = UUID.randomUUID();
File file = new File(imageDir,uuid.toString() + suffix);
if(logger.isDebugEnabled()){
logger.debug("File "+ file.getAbsolutePath() + "created.");
}
return file;
}
}

我正在使用 setResonsePage() 重定向到存在“添加产品”链接的初始页面。这样我就可以得到包含新产品信息的刷新页面。

我的问题是模态窗口在 window.close() 上没有关闭,在那个窗口中我得到了刷新的页面。

我的要求是模式窗口应该关闭并且页面应该刷新。我在我的 setResponsePage() 中传递了 Parentpage.class。

感谢任何帮助和建议!提前致谢。

最佳答案

在打开模态窗口的 ParentPage.class 中,我调用了 setWindowClosedCallback() 方法,在该方法中我将 getPage() 添加到目标中,以便在模态窗口关闭时刷新页面。这是相同的代码

modalDialog.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() 
{
private static final long serialVersionUID = 1L;

@Override
public void onClose(AjaxRequestTarget target)
{
target.addComponent(getPage());
}
});

关于java - Wicket:使用 setResponsePage 重定向到 wicket 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13954273/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com