p:selectOneMenu 转换器的应用范围 bean
Application Scoped bean for converter for p:selectOneMenu
我已经通过 github 和 PrimeFaces 实现了 PrimeFaces selectOneMenu,但不清楚为什么 themeservice-bean 被定义为应用程序范围,例如
@Named
@ApplicationScoped
public class ThemeService {
private List<Theme> themes;
@PostConstruct
public void init() {
themes = new ArrayList<>();
themes.add(new Theme(0, "Nova-Light", "nova-light"));
themes.add(new Theme(1, "Nova-Dark", "nova-dark"));
themes.add(new Theme(2, "Nova-Colored", "nova-colored"));
themes.add(new Theme(3, "Luna-Blue", "luna-blue"));
themes.add(new Theme(4, "Luna-Amber", "luna-amber"));
themes.add(new Theme(5, "Luna-Green", "luna-green"));
themes.add(new Theme(6, "Luna-Pink", "luna-pink"));
themes.add(new Theme(7, "Omega", "omega"));
}
public List<Theme> getThemes() {
return themes;
}
}
在我看来,同一个 bean 应该定义为 View/Request 范围,因为列表可能需要填充不同的记录,但是当我更改范围时,它给出了
的错误
java.lang.NullPointerException
at org.primefaces.showcase.convert.ThemeConverter.getAsObject(ThemeConverter.java:27)
在转换器中的 return 语句
ThemeService service = (ThemeService) fc.getExternalContext().getApplicationMap().get("themeService");
return service.getThemes().get(Integer.parseInt(value));
可能有人对此有所了解。
您尝试从仅存储应用程序作用域 bean 的 applicationMap 获取请求或查看作用域 bean。
尝试将 getApplicationMap 替换为 getRequestMap 或 getViewMap。
或者更好@Inject themeService into your converter:
How to inject @EJB, @PersistenceContext, @Inject, @Autowired, etc in @FacesConverter?
我已经通过 github 和 PrimeFaces 实现了 PrimeFaces selectOneMenu,但不清楚为什么 themeservice-bean 被定义为应用程序范围,例如
@Named
@ApplicationScoped
public class ThemeService {
private List<Theme> themes;
@PostConstruct
public void init() {
themes = new ArrayList<>();
themes.add(new Theme(0, "Nova-Light", "nova-light"));
themes.add(new Theme(1, "Nova-Dark", "nova-dark"));
themes.add(new Theme(2, "Nova-Colored", "nova-colored"));
themes.add(new Theme(3, "Luna-Blue", "luna-blue"));
themes.add(new Theme(4, "Luna-Amber", "luna-amber"));
themes.add(new Theme(5, "Luna-Green", "luna-green"));
themes.add(new Theme(6, "Luna-Pink", "luna-pink"));
themes.add(new Theme(7, "Omega", "omega"));
}
public List<Theme> getThemes() {
return themes;
}
}
在我看来,同一个 bean 应该定义为 View/Request 范围,因为列表可能需要填充不同的记录,但是当我更改范围时,它给出了
的错误java.lang.NullPointerException
at org.primefaces.showcase.convert.ThemeConverter.getAsObject(ThemeConverter.java:27)
在转换器中的 return 语句
ThemeService service = (ThemeService) fc.getExternalContext().getApplicationMap().get("themeService");
return service.getThemes().get(Integer.parseInt(value));
可能有人对此有所了解。
您尝试从仅存储应用程序作用域 bean 的 applicationMap 获取请求或查看作用域 bean。
尝试将 getApplicationMap 替换为 getRequestMap 或 getViewMap。
或者更好@Inject themeService into your converter:
How to inject @EJB, @PersistenceContext, @Inject, @Autowired, etc in @FacesConverter?