是否可以在同一页面上的回发中保持请求范围的bean活动?
一般的问题是,当bean在请求结束时被删除并在每个表单提交时重新创建,例如动态操作后面的布尔值disabled,readonly并rendered重置为默认值并导致表单不再像预期的那样工作.
我遇到这种情况:我在尝试从托管bean中添加新的头像之前删除旧的头像图像.
String fileName = "resources/img/useravatars/" + getSessionBean().getSearchAccount().getAvatar();
File f = new File(fileName);
Run Code Online (Sandbox Code Playgroud)
我已经google了一下,似乎我可以从ExternalContext获取该文件夹的路径,如:
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.getExternalContext(). ...
Run Code Online (Sandbox Code Playgroud)
但我找不到类文档中的适当方法.你能帮忙说些什么而不是...或建议一个更好的解决方案.
PS.不知何故,我怀疑有可能对链接进行硬编码,但到目前为止还没有运气.
我想以编程方式(从Servlet init()内)注册/添加Managed Bean类到应用程序范围.我怎么能用JSF 1.2做到这一点?
我有一个具有以下结构的WAR文件:

在JSF托管bean BusinessObjectTypeListController位于commons-web-1.0.jar中/WEB-INF/lib和参考的BusinessObjectTypeListView.xhtml.当我运行我的Web应用程序并调用该视图时,出现以下错误:
javax.servlet.ServletException:/view/common/businessObjectTypeListView.xhtml @ 34,94 listener ="#{businessObjectTypeListController.selectData}":目标无法访问,标识符'businessObjectTypeListController'已解析为null
为什么找不到控制器类?它应该在classpath中,是吗?
我正在尝试将DAO注入托管属性.
public class UserInfoBean {
private User user;
@ManagedProperty("#{userDAO}")
private UserDAO dao;
public UserInfoBean() {
this.user = dao.getUserByEmail("test@gmail.com");
}
// Getters and setters.
}
Run Code Online (Sandbox Code Playgroud)
在创建bean之后注入DAO对象,但它null在构造函数中并因此导致NullPointerException.如何使用注入的托管属性初始化托管bean?
jsf constructor nullpointerexception managed-bean managed-property
我有一个product.xhtml和一个ProductBean.我使用/ product/{id}来访问产品,所以我在product.xhtml中有一个viewParam,其值为value = ProductBean.id.问题是在bean内部我使用带有PostConstruct注释的init函数来填充产品的细节.为此,我需要id来调用外部函数.我想虽然在viewParam设置bean的id之前调用了init,因此在init中我无法调用外部函数,因为id尚未设置.我做错了什么,如何解决这个问题?
UPDATE
我发现了什么问题.我认为viewParam方法适用于CDI bean,但ManagedProperty方法适用于JSF bean.
我现在还有另一个问题.我的CDI bean是RequestScoped,当渲染product.xhtml时,bean被创建,我猜想以后会被丢弃.有趣的是,我在该bean中有一个函数,当我调用时,我可以读取id(我认为这是因为连接到视图参数)而不是任何其他属性.任何想法如何解决这一问题?
我试图通过以下方式在FacesConverted中注入ManagedBean:
@ManagedBean
@RequestScoped
@FacesConverter(forClass = Group.class)
public class GroupConverter implements Converter {
@ManagedProperty("#{groupService}")
private GroupService groupService;
@Override
public Group getAsObject(FacesContext context, UIComponent arg1,
String groupName) {
return groupService.findGroupByName(groupName);
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object group) {
return ((Group) group).getName();
}
public GroupService getGroupService() {
return groupService;
}
public void setGroupService(GroupService groupService) {
this.groupService = groupService;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是没有注入groupService,我得到一个NullPointerEx.它不应该自动自动装配,因为它也是ManagedBean吗?当我将"getAsObject"更改为"return new Group();"时,这一切都有效.明显.
有任何想法吗?
有没有办法在离开JSF页面时调用方法?
我希望托管bean在应用程序加载时在我的JSF Web应用程序中启动时在内部运行.如何在Glassfish中编写此类并进行配置?
我试图访问jsf托管bean中的示例/ web文件夹(见图中的下图),但似乎无法找到一种方法来实现它

谢谢
managed-bean ×10
jsf ×8
java ×3
jsf-2 ×3
constructor ×1
converter ×1
jar ×1
java-ee ×1
primefaces ×1
scope ×1
servlets ×1
startup ×1
viewparams ×1