- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Java 和 Apache Wicket 1.5 中遇到了一个问题,其中两个匿名类的封闭 Java 对象的标识已更改!
在一个 Wicket 模态窗口中,我想创建第二个模态窗口(用于获取文本字符串提示),然后通过模型的 AJAX 刷新(字符串-整数对的列表)来更新原始模态窗口。
基本上,我用同一方法创建了两个匿名类,但一个匿名类与另一个匿名类之间的封闭实例的“this”指针不同。
对我来说,这似乎不是正常的预期 JVM 行为,但我也无法在 Java 规范中找到其工作原理的任何细节。
public class DropDownChoiceModal extends WebPage {
public String newTermResponse;
private void addAddTermModal() {
addTermModal = new ModalWindow("add_term_modal");
addTermModal.setPageCreator(new ModalWindow.PageCreator() {
public Page createPage() {
PropertyModel pm = new PropertyModel<String>(DropDownChoiceModal.this, "newTermResponse");
System.out.println ("propModel: " + System.identityHashCode(DropDownChoiceModal.this));
return new TextInputModal(addTermModal, "What is the new term you wish to add?", pm);
}
});
addTermModal.setWindowClosedCallback(new WindowClosedCallback() {
public void onClose(AjaxRequestTarget target) {
System.out.println ("propModel: " + System.identityHashCode(DropDownChoiceModal.this));
System.out.println ("newTermResponse: " + DropDownChoiceModal.this.newTermResponse);
// If the value is set then use it
if (newTermAvailable()) {
// Add the new term to the model
model.add(new StringIntegerPair (newTermResponse, 0));
System.out.println ("Update view: " + model.size());
// Update the view
target.add(wmc);
}
System.out.println ("No new term");
}
private boolean newTermAvailable() {
return (newTermResponse != null) && !newTermResponse.isEmpty();
}
});
add(addTermModal);
}
对于 TextInputModal 类:
public class TextInputModal extends WebPage {
public TextInputModal(final ModalWindow modal, String requestString, final IModel<?> model) {
Form<String> form = new Form<String>("form") {
public void onSubmit() {
System.out.println ("Submitted: " + System.identityHashCode(((PropertyModel)model).getTarget()) + "; " + model.getObject());
}
};
// Add the buttons
form.add(new AjaxButton("ok") {
public void onAfterSubmit(AjaxRequestTarget target, Form<?> form) {
System.out.println ("Submitted 2: " + System.identityHashCode(((PropertyModel)model).getTarget()) + "; " + model.getObject());
modal.close(target);
}
});
// Add the form
add(form);
}
}
我得到的输出:
propModel: 698650686
Submitted: 698650686; fdsfds
Submitted 2: 698650686; fdsfds
propModel: 1447892364
newTermResponse: null
No new term
为什么匿名类 1 ( new ModalWindow.PageCreator() {} ) 和匿名类 2 ( new WindowClosedCallback() {} ) 创建时封闭实例 (DropDownChoiceModal.this) 的标识发生了变化?相同的方法( addAddTermModal() )?
提前致谢...
奈杰尔
最佳答案
非常感谢上面评论中的 biziclop...看起来 Wicket 在序列化对象时正在破坏该对象 - “newTermResponse”字符串的内容在此序列化过程中在某个地方丢失了。
我回到这里的嵌套 ModalWindow 示例:
http://www.wicket-library.com/wicket-examples/ajax/modal-window
使用示例中所示的 getPageReference() 而不是 PropertyModel 解决了我的问题。
干杯,
奈杰尔
关于java - 嵌套 ModalWindow 的 Wicket 序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13169059/
我希望能够在用户按下某个键时关闭 ModalWindow,在我的例子中是 ESC。 我有一个用于按键的 Javascript 监听器,它调用取消按钮 ID 的点击事件: jQuery("#"+moda
我想在我的 wicket 页面中创建一个设置对话框。我创建了一个包含表单的 ModalWindow 来实现这一点。这很好用,对话框显示出来,它包含表单,但现在我需要将表单中的一些值返回到调用者页面。有
我需要在模态窗口显示在中间之前修改它的位置。 我有一个ajax按钮,它将打开模式窗口。在 onClick 方法中我尝试了类似... target.appendJavaScript("$(\".wick
我是 wicket 的新手,当我尝试运行我的应用程序时出现以下错误: WicketMessage:模态窗口内容 ID 错误。组件ID:myPanel;内容 ID: 内容: 在我的 AddStudent
ModalWindow 在 Opera 中无法正常工作。不显示窗口内容,但显示浏览器的错误页面 浏览器显示“内部通信错误:检查地址拼写是否正确,或尝试搜索该站点”。错误页面的搜索栏中显示文本“http
我想在其中一个按钮中发生单击事件后使模态窗口透明(不透明度:0.5)。我尝试使用: window.add(AttributeAppender.append("style","color:red; fo
我在 Java 和 Apache Wicket 1.5 中遇到了一个问题,其中两个匿名类的封闭 Java 对象的标识已更改! 在一个 Wicket 模态窗口中,我想创建第二个模态窗口(用于获取文本字符
所以,我先花了几个小时尝试自己“修复”这个问题,然后像疯子一样在谷歌上搜索,但没有找到任何有帮助的东西,所以现在我在这里。 基本上,我在 Wicket 自己的 ModalWindow 中有一个自定义
最近我将我的 Mac 升级到 Catalina,并发现 NSAlert() 出现奇怪的问题。 每当打开任何警报时,我都会在控制台中收到以下错误,并且警报会自动关闭,而无需任何用户单击“确定”按钮。 控
我正在使用一个漂亮的新 show-your-password-single-char JQuery hacks,我可以将其应用于页面上的所有密码字段 $(document).ready( fun
windowA 中的按钮的 IBAction 调用 runModalForWindow:windowB。 windowB 成为键和模态。 windowB 有一个 popUpWindowDatePick
我在 ModalWindow 中显示了几个面板。在这些面板的 html 文件中,我在正文中有脚本标签,例如适用于 SyntaxHighlighter 或 JW Player。如果我将面板嵌入到其自己的
我是一名优秀的程序员,十分优秀!