Mil*_*aid 5 jsf cdi jsf-2 view-scope
我有一个JSF,CDI项目的问题.我做了很多研究,我发现在CDI中没有@ViewedScoped注释.我用对话框解决了基于ajax的页面的问题.我想从datatable传递变量到对话框.为此,我不能使用@RequestedScopedbean,因为在请求结束后丢弃值.任何人都可以帮我解决吗?我不能用,@SessionScoped但这是一个不好的做法恕我直言.或者也许只将这一个变量保存到知道的会话中.你们能给我任何提示如何优雅地解决这个问题吗?
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class ServiceBean implements Serializable {
...
Run Code Online (Sandbox Code Playgroud)
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class SomeBean {
@Inject
ServiceBean serviceBean;
@Postconstruct ...
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred performing resource injection on managed bean warDetailBean
Run Code Online (Sandbox Code Playgroud)
Tar*_*rik 13
首先,如果您尝试使用CDI,则需要通过WEB-INF/beans.xml在应用程序中放置一个文件来激活它(请注意,此文件可以为空),有关该文件的更多信息可以在Weld - JSR-299参考实现中找到.
在使用Tomcat时,请务必遵循如何在Tomcat中安装CDI中的步骤来遵守所有配置要求?
其次,即使您可以@Inject在JSF托管bean中使用,最好不要混合使用JSF托管bean和CDI,请参阅BalusC关于Viewscoped JSF和CDI bean的详细解答.
因此,如果您只想使用CDI @Namedbean,可以使用OmniFaces自己的CDI兼容@ViewScoped:
import javax.inject.Named;
import org.omnifaces.cdi.ViewScoped;
@Named
@ViewScoped
public class SomeBean implements Serializable {
@Inject
ServiceBean serviceBean;
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您只想使用JSF托管bean,则可以使用@ManagedProperty注入属性:
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
@ManagedBean
@ViewScoped
public class SomeBean{
@ManagedProperty(value = "#{serviceBean}")
ServiceBean serviceBean;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7188 次 |
| 最近记录: |