我在JSF 2.0项目中使用SessionScoped bean时遇到了一个非常奇怪的问题.使用Netbeans 6.9.1,Glassfish 3服务器和PrimeFaces 3作为JSF组件库.
这是一些代码:
package com.hia.jsf;
import com.hia.netlabel.jpa.Genre;
import com.hia.netlabel.jpa.Label;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
@ManagedBean
@SessionScoped
public class LabelDetailJSF implements Serializable{
@ManagedProperty("#{genreLabelListJSF}")
private GenreLabelListJSF genreLabelListJSF;
private List<Genre> DetailLabelGenreList;
private Label DetailLabel;
/** Creates a new instance of LabelDetailJSF */
public LabelDetailJSF() {
}
@PostConstruct
public void init(){
System.out.print("Running init LabelDetailJSF");
if(genreLabelListJSF.getSelectedLabel()!=null)
{
System.out.print("genreLabelListJSF was not null");
this.DetailLabelGenreList=genreLabelListJSF.getSelectedLabel().getGenreList();
this.DetailLabel= (genreLabelListJSF.getSelectedLabel());
}
if(this.DetailLabelGenreList==null){
System.out.println("Bloody thing became null");
}
}
/**
* …Run Code Online (Sandbox Code Playgroud) 我有一个报告生成页面,其中我有几个过滤器countryId,Date以及一些其他参数供用户选择.现在基于所选参数,有一个数据库调用,它使用这些参数来获取结果列表.
现在托管bean包含所有这些搜索参数和结果列表.让我们将此bean命名为 Bean1
public class Bean1 implements Constants{
private List<SelectItem> countryList;
private List<String> choosenCountryList;
private List<String> choosenProgramList;
private String invoiceDatePriorTo= CalendarUtilities.getTodaysDate() ;
private List<CustomResults> searchResultList
}
Run Code Online (Sandbox Code Playgroud)
我们还有一个托管bean Bean2,它包含一个属性Bean1
public class Bean2 implements Constants {
private Bean1 bean1;
public getSearchResults(){
//Code for fetching the search list for bean 1
this.setsearchResultList() //=fetched list from DB;
}
public modifySearchResults(){}
}
Run Code Online (Sandbox Code Playgroud)
现在当我们从JSF页面触发一个动作时,我们调用该getSearchResults()方法并将其设置为searchResultList在屏幕上显示.这样我们就可以在屏幕上显示搜索列表
现在我们得到的列表会在屏幕上进行用户修改.现在我们再次调用modifySearchResults来编辑列表时,我们无法检索bean2中的列表,因为托管bean在请求范围内.
谁能告诉我如何继续解决这个问题?
实际上是否可以在JSF中的托管组件之间传递任何数据?如果是的话,如何实现这一目标?
有人可以提供任何样品吗?
为什么Java EE 6 CDI缺少@ViewScoped和@FlashScoped注释?(特别是前者让我感到奇怪,因为CDI源于Seam世界,它已经知道了非常相似的ScopeType.PAGE ...)
使用CDI时建议的解决方法是什么?使用Seam 3?
谢谢
我需要在Servlet中修改用户会话对象(SessionScoped bean-CDI),所以我必须以某种方式获取该bean.我用以下方式注射:
@Inject
private UserSession user;
Run Code Online (Sandbox Code Playgroud)
UserSession是SessionScoped CDI bean.用户方法是从doPost或doGet servlet方法调用的.这很完美; 每次@Inject注释都会注入相应的UserSession bean,但我不明白这种行为是如何实现的.
我假设用@Inject注释的bean只注入一次(当创建对象 - 本例中的Servlet实例时),但这显然是错误的假设.
那么,这些bean什么时候注入到servlet中?按要求?当有多个UserSession对象时,这种方法如何避免冲突(一个servlet实例 - 处理它的多个线程)?
我有这样的支持bean:
@ManagedBean
@SessionScoped
public class TestBean {
private String testString;
public String getTestString() {
return testString;
}
public void setTestString(String testString) {
this.testString = testString;
}
}
Run Code Online (Sandbox Code Playgroud)
我的xhtml页面也非常简单:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:head></h:head>
<h:body>
<h:form>
<h:inputText value="#{testBean.testString}"/>
<h:commandButton action="#{testController.testAction}"/>
</h:form>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
我想要的一切 - 渲染我的h:inputText元素没有价值(空).
我是JSF的新手,所以,你能帮助我吗?
最诚挚的问候!
UPD!
它是简化的代码,我testString在其他地方使用并且testString有价值,我想隐藏它!我想保持这个价值.
我正在使用primefaces v3.5.在数据表中我在一列上使用过滤器.如何在加载页面时为过滤器设置默认值.
我正在尝试制作4个相关菜单.
当用户从第一个菜单中选择项目时,第二个菜单将显示相关数据,当用户从第二个菜单中选择项目时,第三个菜单将显示相关数据,依此类推.
用户将仅在第一个菜单上看到项目,而其他项目将为空白.如果他在第一个菜单上选择一个项目,则第二个菜单将显示数据,但第三个和第四个将保持空白,依此类推.用户最终必须从所有4个菜单中选择条目.
<h:selectOneMenu id="first" value="#{nodes.selectState"}>
<f:selectItems value="#{nodes.stateList}"/>
<f:ajax render="second">
</h:selectOneMenu>
<h:selectOneMenu id="second" value="#{nodes.selectCity"}>
<f:selectItems value="#{nodes.cityList}"/>
<f:ajax render="third">
</h:selectOneMenu>
<h:selectOneMenu id="third" value="#{nodes.selectRegion"}>
<f:selectItems value="#{nodes.regionList}"/>
<f:ajax render="fourth">
</h:selectOneMenu>
<h:selectOneMenu id="fourth" value="#{nodes.selectStation"}>
<f:selectItems value="#{nodes.stationList}"/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
节点Java类
private String selectState; //+setters, getters
private String selectCity; //+setters, getters
private String selectRegion; //+setters, getters
private String selectStation; //+setters, getters
private List<SelectItem> stateList; //+setters, getters
private List<SelectItem> cityList; //+setters, getters
private List<SelectItem> regionList; //+setters, getters
private List<SelectItem> stationList; //+setters, getters
public getStateList(){
stateList= new ArrayList<SelectItem>();
stateList.add(new …Run Code Online (Sandbox Code Playgroud) 我有一个CRUD应用程序..在数据的提取位置,显示n编辑n存储回db.页面之间还有顺序访问,第二页上需要输入第一页上输入的信息,依此类推.什么是最好的范围和原因?
何时使用哪个范围?每个范围的生命周期是什么.
另外,我找不到任何关于范围的好教程.如果您知道相同的情况,请指导.
谢谢,Shikha
嗨,我是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;
Run Code Online (Sandbox Code Playgroud)
在我的页面我使用selectBooleanCheckbox:
<h:selectBooleanCheckbox id="checkbox"
value="#{newsForm.checkboxes[news.id]}" />
Run Code Online (Sandbox Code Playgroud)
所以我不明白为什么当我按f5时我的Map<Integer, Boolean> allCheckboxes一些元素值为true.每次删除后我都会重新创建Map<Integer, Boolean> allCheckboxes
更新 news.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']}" /> …Run Code Online (Sandbox Code Playgroud)