- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
您好,我是 JSF 的新手,遇到了这样的问题。在我的页面上,我有新闻列表,每个新闻都有复选框(我们可以选中此复选框,然后删除选中的新闻)。这很好用。但是删除后我返回到我的页面并按 F5,然后我的应用程序认为已选中已删除复选框下方的复选框并将其删除。例如我有这个:
按下删除键,得到这个: 然后按 f5 我看到了这个:
所以我的删除方法是这样的:
Map<Integer, Boolean> allCheckboxes = newsForm.getCheckboxes();
Set<Integer> checkboxes = newsForm.getCheckboxes().keySet();
Set<Integer> checkedCheckboxes = new HashSet<>();
for(Integer id : checkboxes){
boolean value = allCheckboxes.get(id);
if(value){
checkedCheckboxes.add(id);
}
}
if (checkedCheckboxes.size() != 0) {
newsDao.deleteNewsById(checkedCheckboxes.toArray());
} else {
Integer[] delete = { newsForm.getNews().getId() };
newsDao.deleteNewsById(delete);
}
newsForm.setNewsList(newsDao.getNewsList());
return list() + REDIERCT;
在我的页面我使用 selectBooleanCheckbox:
<h:selectBooleanCheckbox id="checkbox"
value="#{newsForm.checkboxes[news.id]}" />
所以我不明白为什么当我按 f5 时我的 Map<Integer, Boolean> allCheckboxes
有一些值为 true 的元素。每次删除后我都会重新创建 Map<Integer, Boolean> allCheckboxes
更新新闻.xhtml
<h:form id="main-form" onsubmit="return getSelectedCheckBoxes()">
<h:commandLink styleClass="news-link" action="#{controller.list}"
value="#{messages['body.news']}" />
>>
<h:outputText value="#{messages['body.news.titles.list']}" />
<br />
<ui:repeat id="repeat" var="news" value="#{newsForm.newsList}">
<div id="news-table">
<div id="news-list-title">
<h:outputText value="#{messages['body.news.title']}" />
<h:outputText style="margin-left:10px;" value="#{news.newsTitle}" />
</div>
<div id="news-list-date">
<h:outputText value="#{news.newsDate}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</div>
<div id="news-list-brief">
<h:outputText value="#{news.brief}" />
</div>
</div>
<div id="links-style-area">
<h:commandLink action="#{controller.view(news.id)}"
value="#{messages['body.label.view']}" />
<h:commandLink action="#{controller.edit(news.id)}"
value="#{messages['body.label.edit']}" />
<h:selectBooleanCheckbox id="checkbox"
value="#{newsForm.checkboxes[news.id]}" />
</div>
</ui:repeat>
<p id="button-style">
<h:commandButton styleClass="button" action="#{controller.delete}"
onclick="clicked = 'deleteList'"
value="#{messages['body.button.delete']}"
rendered="#{not(empty newsForm.newsList)}" />
</p>
<h:outputText id="checkbox-error"
value="#{messages['error.error.delete.list']}"
styleClass="errorMessage" />
</h:form>
新闻表单 bean:
@ManagedBean(name="newsForm")
@SessionScoped
public class NewsBean implements Serializable{
private static final long serialVersionUID = 1L;
private News news;
private List<News> newsList;
private Map<Integer, Boolean> checkboxes = new HashMap<>();
public NewsBean(){}
public News getNews() {
return news;
}
public void setNews(News news) {
this.news = news;
}
public List<News> getNewsList() {
return newsList;
}
public void setNewsList(List<News> newsList) {
this.newsList = newsList;
}
public Map<Integer, Boolean> getCheckboxes() {
return checkboxes;
}
public void setCheckboxes(Map<Integer, Boolean> checkboxes) {
this.checkboxes = checkboxes;
}
}
Controller bean:
@ManagedBean(name="controller")
@SessionScoped
public class ControllerBean implements Serializable{
private static final long serialVersionUID = 1L;
private static final String PREVIOUS_PAGE = "previousPage";
private static final String LIST = "news";
private static final String EDIT = "edit";
private static final String VIEW = "view";
private static final String REDIERCT = "?faces-redirect=true";
@ManagedProperty(value="#{jpaDao}")
private INewsDao newsDao;
@ManagedProperty(value="#{newsForm}")
private NewsBean newsForm;
public ControllerBean() {
}
@PostConstruct
public void init() {
try {
list();
} catch (NewsManagerException e) {
}
}
public String list() throws NewsManagerException {
newsForm.setNews(new News());
newsForm.setCheckboxes(new HashMap<Integer, Boolean>());
newsForm.setNewsList(newsDao.getNewsList());
setAttribute(PREVIOUS_PAGE, LIST);
return LIST;
}
public String add() {
News news = new News();
news.setNewsDate(new Date());
newsForm.setNews(news);
return EDIT;
}
private void setAttribute(String name, String value) {
Map<String, Object> sessionMap = FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap();
sessionMap.put(name, value);
}
private String getAttribute(String name) {
Map<String, Object> sessionMap = FacesContext.getCurrentInstance()
.getExternalContext().getSessionMap();
return (String) sessionMap.get(name);
}
public String save() throws NewsManagerException {
int id = newsForm.getNews().getId();
setAttribute(PREVIOUS_PAGE, VIEW);
if (id == 0) {
newsDao.createNews(newsForm.getNews());
return VIEW;
}
newsDao.editNews(newsForm.getNews());
return VIEW;
}
public String edit(int id) throws NewsManagerException {
News news = newsDao.getNewsById(id);
newsForm.setNews(news);
return EDIT;
}
public String view(int id) throws NewsManagerException {
setAttribute(PREVIOUS_PAGE, VIEW);
newsForm.setNews(newsDao.getNewsById(id));
return VIEW;
}
public String cancel() throws NewsManagerException {
String page = getAttribute(PREVIOUS_PAGE);
News news = newsForm.getNews();
if (news.getId() != 0) {
int id = news.getId();
news = newsDao.getNewsById(id);
newsForm.setNews(news);
}
return page;
}
public String delete() throws NewsManagerException, IOException {
setAttribute(PREVIOUS_PAGE, LIST);
Map<Integer, Boolean> allCheckboxes = newsForm.getCheckboxes();
Set<Integer> checkboxes = newsForm.getCheckboxes().keySet();
Set<Integer> checkedCheckboxes = new HashSet<>();
for(Integer id : checkboxes){
boolean value = allCheckboxes.get(id);
if(value){
checkedCheckboxes.add(id);
}
}
if (checkedCheckboxes.size() != 0) {
newsDao.deleteNewsById(checkedCheckboxes.toArray());
} else {
Integer[] delete = { newsForm.getNews().getId() };
newsDao.deleteNewsById(delete);
}
newsForm.setNewsList(newsDao.getNewsList());
return list() + REDIERCT;
}
public INewsDao getNewsDao() {
return newsDao;
}
public void setNewsDao(INewsDao newsDao) {
this.newsDao = newsDao;
}
public NewsBean getNewsForm() {
return newsForm;
}
public void setNewsForm(NewsBean newsForm) {
this.newsForm = newsForm;
}
}
最佳答案
您的具体问题是因为复选框值本质上是请求/ View 范围的,但您的托管 bean 是 session 范围的,并且您在删除后没有清除选中的复选框值。
您需要将 View 范围内的数据放在 View 范围内而不是 session 范围内。
@ManagedBean
@ViewScoped
关于java - jsf 中的 SelectBooleanCheckbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15337884/
我有一个,情况:在 JSF 页面中,我有一些 selectBooleanCheckbox。我需要它,当我检查其中一个时,其他一些未选中。我正在努力在 JasperReports 报告中添加或删除列,只
我正在使用自定义复选框的想法 Ryan Fait's Idea 您可以在其中使用自定义图像来创建自定义复选框。但我无法让复选框消失,只有常规框。示例图片在这里 这是我的代码..
我想在 primefaces 的选择/取消选择复选框上显示确认对话框。我试过了 但它不起作用,因为 selectBooleanCheckBox 不可确认。是否有解决此问题的解决方法? 最
我有一个带有复选框的 h:datatable:
我正在开发一个小型单页网络应用程序。在其中,我有一个数据表,其中包含一个 boolean 值列。我想尝试将其显示为复选框。但是它在渲染时失败了。我猜这是因为需要渲染对象并且复选框是 boolean 值
您好,我是 JSF 的新手,遇到了这样的问题。在我的页面上,我有新闻列表,每个新闻都有复选框(我们可以选中此复选框,然后删除选中的新闻)。这很好用。但是删除后我返回到我的页面并按 F5,然后我的应用程
我有一个 JSF 页面,我希望在该页面上有一个复选框,单击该复选框后,将从页面中添加/删除某些其他表单字段。这是我目前用于复选框的(简化)代码: 这是我要隐藏的组件的代码: 1 &
有人可以告诉我如何在组件的值中使用否定说复选框来启用和禁用它吗? 当 bean 中的属性 (somevalue) 的值为 false 时,我必须禁用复选框。 像 对于 bean 属性 boolean
我正在编写 JSF 页面,该页面要求用户单击一个复选框(类似于接受许可协议(protocol))我有以下代码: 我正在设置 required=true,但没有对复选框进行验证。我没有看到任
我有一个 p:selectBooleanCheckbox,它显示一个确认操作的对话框: 更改 p:selectBooleanCheckbox 时,confirmDialog 显示:
我有一个可编辑的数据表 (editMode = "cell")。 编辑自由文本字段和列表框非常简单。但是,我不知道如何编辑复选框字段。更具体地说,当我尝试编辑复选框选择时,输出方面的数据在更改后并未实
我在 ui:repeat 中的多个 DataTable 中使用多个 selectBooleanCheckBox 时遇到一些问题。 类似这样的事情
使用 Trinidad selectBooleanCheckbox 组件如下: 渲染 html 是: X
我正在使用 jDeveloper 12.1.3 和 MAF 2.0.0.0。我正在尝试在移动应用程序中build设置页面。所有项目均基于移动设备上的本地 SQLite 数据库。我已经设置了 POJO(
如何通过选中/取消选中 selectBooleanCheckbox 来重新加载页面(并更新模型值)? @Ellie:我都试过了 和 ,但没有任何反应。 (一段)代码是这样的:
我有 (其中 wai:collectionIter 是自定义标签) 但是相应的html代码看起来像
in Primefaces?
我正在尝试更改 的样式在 像这样的可检查图像 exemple ,我的问题是如何选择正确的 CSS 类来用我的新样式修改 Primefaces 组件的样式,因为在浏览器的 HTML 输出中我发现了许多
我们有每行都有 h:selectBooleanCheckbox 的表格(复选框代表 boolean)。我们希望在更改复选框值(在任何行中)时调用支持 bean 操作。 以下代码的工作方式很有趣:如果
我怎样才能给红色边框? 我试了如下,但是根本没有出现边框。 最佳答案 试试这个, 关于html - 如何设置 h :selectBooleanCheckbox? 的边框样式,我们在Stack Ov
我正在使用 JSF 2 和 Primefaces 4 并遇到以下问题: 我的 XHTML 中有以下代码: Formats
我是一名优秀的程序员,十分优秀!