我试图访问jsf托管bean中的示例/ web文件夹(见图中的下图),但似乎无法找到一种方法来实现它

谢谢
我打算将Web应用程序从使用JSF托管bean转换为使用CDI托管bean.我知道我需要在下面做:
是这一切都需要做吗?我需要注意哪些问题?
我在@ViewScoped托管bean中读过@EJB会导致java.io.NotSerializableException,但是我的状态保存设置是server.
这是我有的:
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>sispra</display-name>
<welcome-file-list>
<welcome-file>index.jsf</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>facelets.BUILD_BEFORE_RESTORE</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.PRETTY_HTML</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>glass-x</param-value>
</context-param> …Run Code Online (Sandbox Code Playgroud) 使用单例类和应用程序范围的托管bean来保存应用程序数据有区别吗?
我需要查找某些JNDI资源,例如远程bean接口,因此我自己写了一个单例来缓存我的引用,只允许单引用.(服务定位)
我在两个不同的浏览器中打开了我的网站,而且这个单例只被初始化了一次.所以我假设它的应用范围?
应用程序范围托管bean的任何其他好处,然后能够访问其在jsf中的属性?
我在应用程序启动页面加载时收到以下错误:
SEVERE: Error Rendering View[/HomeTemplate/equityVolume.xhtml]
javax.el.ELException: /HomeTemplate/equityVolume.xhtml @70,78 value="#{equityBean.scripList}": java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed...
Caused by: java.lang.IllegalStateException: PWC3999: Cannot create a session after the response has been committed...
Run Code Online (Sandbox Code Playgroud)
当我将css应用到我的主页时出现此错误,当我删除css模板时错误消失(但我想填写css模板)以下是导致错误的bean代码片段(通过调试找到)
public List<MasterScrip> getScripList() {
HttpServletRequest req=(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); //error line
HttpSession session=req.getSession();
type=(String)session.getAttribute("type");...
Run Code Online (Sandbox Code Playgroud)
xhtml代码:
<h:body>
<ui:composition template="commonClientLayout.xhtml">
<ui:define name="contentFile">
<div id="content">
<h:form id="frm">...
Run Code Online (Sandbox Code Playgroud)
当我删除ui:组合并定义标签(即如果我不应用css),那么我不会得到这个错误.什么可能导致这个错误,我该如何解决?
编辑:
@PostConstruct
void initialiseSession() {
if(type!=null)
{
if(type.equalsIgnoreCase("losers"))
{
scripList=new ArrayList<MasterScrip> ();
scripList=getScripByPriceLosers(exchange);
// return scripList;
}
else if(type.equalsIgnoreCase("gainers"))
{
scripList=new ArrayList<MasterScrip> …Run Code Online (Sandbox Code Playgroud) 我有一个托管bean(SessionScope如下)
@ManagedBean(name="login")
@SessionScoped
public class Login implements Serializable {
private String userSession;
public Login(){
}
}
Run Code Online (Sandbox Code Playgroud)
在此managedbean中,在登录功能的某处,我将电子邮件存储为会话.
我有另一个名为ChangePassword(ViewScoped)的托管bean.我需要访问存储在userSession中的电子邮件的值.
这样做的原因是我需要在完成更改密码功能之前找出当前的userSession(电子邮件).(需要更改该特定电子邮件的密码)
我怎么做的?JSF的新手,感谢任何帮助!
我正在阅读Stackoverflow中的一篇旧帖子,内容如下:
In the big architectural picture, your own JSF code is the V:
M - Business domain/Service layer (e.g. EJB/JPA/DAO)
V - Your JSF code
C - FacesServlet
In the smaller developer picture, the architectural V is in turn dividable as follows:
M - Entity
V - JSP/XHTML page
C - Managed bean
So it's basically a M(MVC)C.
Run Code Online (Sandbox Code Playgroud)
在大写的情况下,JavaBean是一个模型,
但是在小写的情况下,Managed bean会变成一个控制器吗?
他们不是一回事> ?? 差异是什么?
我有以下CDI托管bean:
@Named
@SessionScoped
public class InfoPageController implements Serializable {
@Inject
private InfoPageMapper mapper;
}
Run Code Online (Sandbox Code Playgroud)
它在部署到GlassFish 4.1期间抛出以下异常:
Exception while loading the app : CDI deployment failure:WELD-001413: The bean Managed Bean [class de.triaconsulting.cashyourgame.fe.controller.InfoPageController] with qualifiers [@Default @Any @Named] declares a passivating scope but has a non-passivation-capable dependency Managed Bean [class de.triaconsulting.cashyourgame.fe.mapper.InfoPageMapper] with qualifiers [@Any @Default]
org.jboss.weld.exceptions.UnserializableDependencyException: WELD-001413: The bean Managed Bean [class de.triaconsulting.cashyourgame.fe.controller.InfoPageController] with qualifiers [@Default @Any @Named] declares a passivating scope but has a non-passivation-capable dependency Managed Bean [class de.triaconsulting.cashyourgame.fe.mapper.InfoPageMapper] with …Run Code Online (Sandbox Code Playgroud) 我正在使用Wildfly 10.0.0 Final,Java EE7,Maven和JPA 2.1.当我查询我的数据库中的记录时,它工作正常并列出了员工,但是当我试图坚持一个新员工时,它给了我以下异常:
javax.servlet.ServletException: WFLYJPA0060: Transaction is required to perform this operation (either use a transaction or extended persistence context)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
...
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用JSF和CDI bean来实现它.我有一个JTA数据源,我在persistence.xml文件中配置了它:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.1">
<persistence-unit name="MyPersistenceUnit">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:/EmployeesDS</jta-data-source>
<class>com.home.entity.Employee</class>
<properties>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hbm2ddl.auto" value="update"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
CDI bean可以在下面看到.它相对简单,有一种方法可以列出25名员工,另一种方法可以保留特定员工:
@Named
@RequestScoped
public class DataFetchBean {
@PersistenceContext
EntityManager em;
public List getEmployees() {
Query query = …Run Code Online (Sandbox Code Playgroud) 众所周知,建议使用注释javax.enterprise.context而不是javax.faces.bean它们被弃用.
我们都发现eager="true"带有@ApplicationScoped from javax.faces.bean和带有@PostConstruct方法的ManagedBeans 对于Web应用程序初始化非常有用,例如:从文件系统读取属性,初始化数据库连接等等...
示例:
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.annotation.PostConstruct;
@ApplicationScoped
@ManagedBean(eager=true)
public class someBean{
@PostConstruct
public void init(){
//Do all needed application initialization.
}
...
}
Run Code Online (Sandbox Code Playgroud)
我想知道的是,如果我使用注释,我怎么能得到相同的行为javax.enterprise.context.
注意:
@Startup注释fromjavax.ejb将有助于运行该代码,但仅在应用程序服务器启动时部署webapp时.