- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个简单的面板,该面板使用 ListView
呈现上传的图像及其替代文本。我可以显示上传的图像及其数据库中的替代文本,但我找不到通过 TextFields
更新替代文本的解决方案。
这是用于呈现数据的模型,按预期工作:
this.listModel = new LoadableDetachableModel<Object>() {
protected Object load() {
ArrayList<SingleImage> images = SingleImageDao.getImagesByPageId(pageId);
return images;
}
};
这是 setListView()
方法:
this.setListView(new ListView("imageListItem", this.listModel) {
protected void populateItem(final ListItem item) {
final SingleImage singleImage = (SingleImage) item.getModelObject();
item.add(new AttributeModifier("id", singleImage.getId()));
item.add(new Image("imageListItemImg",
new ContextRelativeResource(uploadedImgDir
+ singleImage.getFileName())));
final TextField altText = new TextField<String>("altText", new PropertyModel<String>(singleImage, "altText"));
item.add(altText);
}
});
this.listView.setReuseItems(true);
还有一个按钮可以保存更改:
this.saveButton = new AjaxButton("saveButton") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
target.add(listContainer);
}
};
listContainer
是包装 ListView
的 WebMarkupContainer
。关于如何更新 altText
字段有什么想法吗?
编辑: Tom 要求提供完整的 Java 类和 HTML 页面。
Java 类:
public class ImageListPanel extends Panel {
private final String uploadedImgDir = "img//uploaded//";
private int pageId;
private IModel<?> listModel = null;
private ListView<?> listView = null;
private WebMarkupContainer imageListContainer = null;
private WebMarkupContainer listContainer = null;
private Form<?> actionButtons = null;
private AjaxButton saveButton = null;
public ImageListPanel(String id, final int pageId) {
super(id);
this.pageId = pageId;
this.listModel = new LoadableDetachableModel<Object>() {
protected Object load() {
ArrayList<SingleImage> images = SingleImageDao.getImagesByPageId(pageId);
return images;
}
};
this.setListView(new ListView("imageListItem", this.listModel) {
protected void populateItem(final ListItem item) {
final SingleImage singleImage = (SingleImage) item.getModelObject();
item.add(new AttributeModifier("id", singleImage.getId()));
item.add(new Image("imageListItemImg",
new ContextRelativeResource(uploadedImgDir
+ singleImage.getFileName())));
final TextField altText = new TextField<String>("altText", new PropertyModel<String>(singleImage, "altText"));
item.add(altText);
}
});
this.listView.setReuseItems(true);
this.imageListContainer = new WebMarkupContainer("imageListContainer");
this.listContainer = new WebMarkupContainer("listContainer");
this.setActionButtons(new Form<Void>("actionButtons"));
this.saveButton = new AjaxButton("saveButton") {
@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
target.add(listContainer);
listContainer.add(new AttributeModifier("class", "passive"));
}
};
this.imageListContainer.setOutputMarkupId(true);
this.listContainer.setOutputMarkupId(true);
add(this.imageListContainer);
this.imageListContainer.add(this.listContainer);
this.listContainer.add(this.listView);
this.listView.setOutputMarkupId(true);
this.getActionButtons().setOutputMarkupId(true);
this.getActionButtons().add(this.saveButton);
this.imageListContainer.add(this.getActionButtons());
}
public int getPageId() {
return pageId;
}
public void setPageId(int pageId) {
this.pageId = pageId;
}
public WebMarkupContainer getListContainer() {
return listContainer;
}
public void setListContainer(WebMarkupContainer listContainer) {
this.listContainer = listContainer;
}
public ListView<?> getListView() {
return listView;
}
public void setListView(ListView<?> listView) {
this.listView = listView;
}
public Form<?> getActionButtons() {
return actionButtons;
}
public void setActionButtons(Form<?> actionButtons) {
this.actionButtons = actionButtons;
}
}
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="imageListContainer" id="image-list-container">
<div wicket:id="listContainer" id="imagesContainer">
<ul id="sortable">
<li wicket:id="imageListItem" class="img-list-item">
<img wicket:id="imageListItemImg" class="thumbnail" />
<input wicket:id="altText" class="altText" type="text" size="40" />
</li>
</ul>
</div>
<form wicket:id="actionButtons">
<p>
<input wicket:id="saveButton" id="saveButton" type="submit" value="Save" />
</p>
</form>
</div>
</wicket:panel>
</body>
</html>
编辑 2:更新了代码,ListView 现在包装在 Form 内。
Java 类:
public class ImageListPanel extends Panel {
private final String uploadedImgDir = "img//uploaded//";
private int pageId;
private IModel<?> listModel = null;
private ListView<?> listView = null;
private WebMarkupContainer imageListContainer = null;
private WebMarkupContainer listContainer = null;
public ImageListPanel(String id, final int pageId) {
super(id);
this.pageId = pageId;
this.listModel = new LoadableDetachableModel<Object>() {
protected Object load() {
ArrayList<SingleImage> images = SingleImageDao.getImagesByPageId(pageId);
return images;
}
};
this.setListView(new ListView("imageListItem", this.listModel) {
protected void populateItem(final ListItem item) {
final SingleImage singleImage = (SingleImage) item.getModelObject();
item.add(new AttributeModifier("id", singleImage.getId()));
item.add(new Image("imageListItemImg",
new ContextRelativeResource(uploadedImgDir
+ singleImage.getFileName())));
final TextField altText = new TextField<String>("altText", new PropertyModel<String>(singleImage, "altText"));
item.add(altText);
}
});
this.listView.setReuseItems(true);
Form formListView = new Form("formListView", this.listModel) {
protected void onSubmit() {
ArrayList<SingleImage> images = (ArrayList<SingleImage>) listModel.getObject();
for (SingleImage singleImage : images) {
System.out.println(singleImage.getAltText());
}
};
};
this.imageListContainer = new WebMarkupContainer("imageListContainer");
this.listContainer = new WebMarkupContainer("listContainer");
this.imageListContainer.setOutputMarkupId(true);
this.listContainer.setOutputMarkupId(true);
add(this.imageListContainer);
this.imageListContainer.add(this.listContainer);
//this.listContainer.add(this.listView);
this.listContainer.add(formListView);
formListView.add(this.listView);
this.listView.setOutputMarkupId(true);
}
public int getPageId() {
return pageId;
}
public void setPageId(int pageId) {
this.pageId = pageId;
}
public WebMarkupContainer getListContainer() {
return listContainer;
}
public void setListContainer(WebMarkupContainer listContainer) {
this.listContainer = listContainer;
}
public ListView<?> getListView() {
return listView;
}
public void setListView(ListView<?> listView) {
this.listView = listView;
}
}
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<wicket:panel>
<div wicket:id="imageListContainer" id="image-list-container">
<div wicket:id="listContainer" id="imagesContainer">
<form wicket:id="formListView">
<ul id="sortable">
<li wicket:id="imageListItem" class="img-list-item">
<img wicket:id="imageListItemImg" class="thumbnail" />
<input wicket:id="altText" class="altText" type="text" size="40" />
</li>
</ul>
</form>
<input type="submit" value="submit" />
</div>
</div>
</wicket:panel>
</body>
</html>
最佳答案
如果我理解正确,您想要显示一个图像列表,每个图像都有一个文本字段来编辑其替代文本并将其存储在数据库中。在您发布的代码中,您必须更改以下内容:
关于java - Wicket:通过 ListView 中的 TextFields 更新模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17245342/
过去,我为我的表单构建了如下标签: : 我还需要使用wicket:label吗?标签?我没有使用 wicket:label在 wicket 7 中,它似乎工作正常。我可能不理解使用 wicket:la
是否可以为 MarkupContainer 生成标记?动态地,即不为其存储 HTML 文件? 我考虑将标记作为纯字符串从数据库中读取,以提供类似 CMS 的功能。 最佳答案 有趣的问题,我不确定这是否
是否有适用于 Wicket 1.5 的有效、支持和维护的脚手架解决方案?我知道 Wicketopia 位于两个不同地点 sourceforge和 github但这仍然针对 wicket 1.4,带来了
我想了解一些关于 wicket 支持泛型模型的信息。我了解了模型、 Prop 模型和 Prop 复合模型。 但是 Model 类呢?如果我这样做会发生什么: Label label = new Lab
如何在 Wicket 中实现多选下拉。我能够使用 bootstrap 创建多选下拉 View ,但我无法获得如何将所选选项与下拉组件的 IModel 相关联? Wicket 有没有可能?我不想使用 L
我正在使用 wicket 1.4.9 并实现了 spring + wicket auth-role 并根据页面上的角色使用@AuthorizeInstantiation。我有多个自定义角色。 我已经按
如何在 Wicket 1.5 中执行以下操作? page.getRequestCycle().setRequestTarget(new RedirectRequestTarget("http://ww
我想用密码保护 Wicket 中的网页,以便用户只有在他/她登录后才能访问它。 我还希望该页面显示登录页面,然后在登录用户试图访问的原始页面后。 这是如何用 wicket 完成的?我已经创建了一个登录
我使用的是 wicket 1.5,但在 getClientInfo() 方法中看不到 (WebRequest)RequestCycle.get().getRequest() 我在另一个地方看到了这段代
我刚刚尝试了 Apache Wicket“Hello, world”应用程序,我注意到在呈现的 HTML 输出中,Wicket 暴露了它的内部属性。 这是呈现的 HTML 在浏览器的“查看源代码”中的
我找不到像 wicket:include 之类的 wicket 标签?谁能建议我什么?我想在 html 文件中包含/注入(inject)原始源代码?如果没有这样的实用程序,有什么建议来开发它吗? 更新
在页面中查找特定(已知 wicket id)Wicket 组件的方法是什么? 最佳答案 您的选择是: get()搜索一个组件的方法 特定路径上的组件。 安 iterator()在拥有他所有 child
我正在为 wicket 页面编写测试。我的页面上有三个下拉菜单。根据从下拉列表中选择的值,面板会被渲染(面板包含一个数据表)。 如何更改 wicket 测试中下拉菜单的值,以便我可以针对所选值的不同组
在我的 wicket 应用程序中,有一些页面供用户使用,具体取决于他们的角色和不同的标准。在我的数据库中,我存储了用作该用户背景的图像路径。每个用户都有一个独特的页面。我知道我可以添加读取图像,如果我
如何在 Wicket 中定义我自己的反馈消息? 例如:如果我提供了一个错误的用户名,我想得到一个错误信息,如“用户名不正确,请尝试再次登录”。而不是使用默认的错误消息。 一个例子会是什么样的? 最佳答
假设我想要 3 个不同的 *.html 用于 WebPage。 F.e. page_small.html、page_tablet.html、page_desktop.html。我如何解析 screen
我无法确定 Wicket 应用程序中 RuntimeException 的原因。我设置了许多断点,但是当我提交表单时,只有在加载表单时,没有一个断点被触发。这是堆栈: WicketMessage: N
我刚刚编写了我的第一个 Wicket 组件 :) 它包含一个 ListView 和一些 Radio 输入字段。现在我想对所选值是否进入模型进行单元测试。 由于 WicketTester.newForm
我的类属性有两个 CSS 类值。 HTML 开头是这样的: 我想动态地把它改成这样: 目前我正在这样做: component.add(new SimpleAttributeModifier("cl
我有一个使用 PropertyModel 的文本字段,如下所示: TextField ageField = new TextField("age", new
我是一名优秀的程序员,十分优秀!