我对jsf 2中闪存范围的使用存在误解.我想在操作过程中将对象放在flash地图中,并在下一页显示该对象.这是我的动作(由h:commandLink调用):
public String showDetail(PersonneDTO personne) {
MessageFlashBean message = new MessageFlashBean();
message.addMessage("test");
FacesContext.getCurrentInstance().getExternalContext().getFlash()
.put("test", message);
return "showDetail";
}
Run Code Online (Sandbox Code Playgroud)
这只是一个测试,但我想要使用的真实对象更复杂.
这是闪存使用的第二页:
<ui:fragment rendered="#{flash.test != null and flash.test.hasMessage()}" >
<ui:repeat var="message" value="#{flash.test.messages}">
#{message}
</ui:repeat>
</ui:fragment>
Run Code Online (Sandbox Code Playgroud)
这是导航(这是我的问题:)):
<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>showDetail</from-outcome>
<to-view-id>/private/showDetail.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,闪存范围工作正常,我的消息出现.
但是如果我在导航的情况下添加一个重定向,我在Flash地图中的对象就消失了.
我不明白为什么我不能在导航规则中使用重定向(我相信这是flash范围的目标).
我的代码可能有问题.
有人可以帮帮我吗?
谢谢
我想阻止JavaFX中弹出窗口的所有者窗口.
我像这样初始化我的弹出窗口:
popUp = new Popup();
popUp.getContent().add(content);
popUp.show(pane.getScene().getWindow());
Run Code Online (Sandbox Code Playgroud)
有了这个,我仍然可以在第一个窗口(窗格窗口)中工作.我想禁用此操作,我希望用户只在弹出窗口中工作.
这该怎么做 ?
谢谢.
我需要使用我的JSF应用程序将XML发送到浏览器.此XML由应用程序生成.我尝试创建它,但我的JSF应用程序每次都发送HTML.
如何更改内容类型以发送xml?
谢谢你的帮助.
我有一个管理3个数据库的应用程序.我在seam框架上使用了带JPA的hibernate.
所以我有一个persitence.xml文件,有三个像这样的persitence-unit(我删除了db2和db3的属性):
<persistence-unit name="db1" transaction-type="JTA" >
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>db1source</jta-data-source>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.connection.driver_class"
value="oracle.jdbc.driver.OracleDriver" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.default_schema" value="SI_TEC" />
<property name="hibernate.validator.apply_to_ddl" value="false" />
<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.WeblogicTransactionManagerLookup" />
</properties>
</persistence-unit>
<persistence-unit name="db2" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>d2source</jta-data-source>
</persistence-unit>
<persistence-unit name="db3" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>d3source</jta-data-source>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)
在我的seam components.xml文件中,我使用我的hibernate配置创建了3个managed-persistence-context来映射seam.
最后,我有几个实体,我的问题就在这里.我需要在db2和db3中的其他实体中保留一些实体.所以数据库模式是不同的,当我部署我的应用程序时,我收到此错误:
org.hibernate.HibernateException: Missing table: PORTAILPERMISSION
at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1113)
at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:349)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
Truncated. see log file for complete stacktrace
Run Code Online (Sandbox Code Playgroud)
因为,db2中不存在表PORTAILPERMISSION. …
我的应用程序和内存存在很大问题.应用程序(带有jsf/richfaces/facelet的java)同时被大约7000个用户使用.
默认情况下,变量com.sun.faces.numberOfViewsInSession在web.xml中设置为15.此变量创建一个视图树,jsf在向后点击15次时检索特定视图.
例如,我有3个屏幕用于应用程序,我使用Firefox.我在第一个标签中进入第三个屏幕.在第二个选项卡中,我有第一个屏幕,然后单击下一个按钮,jsf检索第一个屏幕并转到第二个屏幕.
这个机制很棒,但它消耗了大量的内存(对于我来说会话需要25Mo),当你将这个数字乘以7000时,我需要175 Go的内存,这是不可能的.
所以我试着设置com.sun.faces.numberOfViewsInSession等于1(3Mo by session).
但是以我的例子为例,当我点击下一个按钮的第二个标签时,我得到了下一个错误:
javax.servlet.ServletException: viewId:/private/pages/data/dataView.faces - View /private/pages/data/dataView.faces could not be restored.
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:270)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at fr.generali.mezzo.front.commun.performance.filters.PerformanceFilter.doFilter(PerformanceFilter.java:72)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:173)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:420)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
Run Code Online (Sandbox Code Playgroud)
此错误是合乎逻辑的,因为我的numberOfViewsInSession为1.
所以,我的问题是: …
我做了角落飞镖教程,我有一个问题.
要声明可用于依赖注入的类型,我必须这样做:
class MyAppModule extends Module {
MyAppModule() {
type(RecipeBookController);
}
}
Run Code Online (Sandbox Code Playgroud)
所有类型都是如此.
在一个大型应用程序中,您可以拥有数百种类型,因此声明所有类型是一种奇怪的方式.
有没有其他方法可以做到这一点?
谢谢.
我有一个属性文件,我想在服务中注入一个属性.
我想像这样使用DI的构造函数方法:
@Inject
public ScanService(@Named("stocks.codes") String codes, IYahooService yahooService) {
this.yahooService = yahooService;
this.codes = codes;
}
Run Code Online (Sandbox Code Playgroud)
我尝试做一个像这个链接中指定的模块=> Dagger:注入@Named字符串?
@Provides
@Named("stocks.code")
public String providesStocksCode() {
return "test";
}
Run Code Online (Sandbox Code Playgroud)
对于我的服务的提供者方法:
@Provides
@Singleton
public IScanService provideScanService(String codes, IYahooService yahooService){
return new ScanService(codes, yahooService);
}
Run Code Online (Sandbox Code Playgroud)
当我运行编译时,我收到此错误:
[ERROR] /Users/stocks/src/main/java/net/modules/TestModule.java:[22,7]错误:上java.lang.String中未注射的成员.你想添加一个注射构造函数吗?通过provideScanService(java.lang.String中,net.IYahooService),用于net.modules.TestModule所需
如何在构造函数中正确注入我的属性?
谢谢.
我想用CDI开发一个应用程序(我经常使用Spring)来发现这项技术.
我已经阅读了许多关于CDI的文章,以了解它是如何工作的.我有一个关于事务管理的简单问题(例如,对于数据库中的持久性):
是否必须使用EJB 3.1进行事务管理,或者是否可以仅使用CDI进行事务管理?
谢谢.
我想使用 Spring Event 与我的 Web 应用程序中的 bean 进行“对话”。
例如,我的触发事件的 bean 是这样的:
@Controller
@Scope("request")
@KeepAlive
public class Controller extends InitializingBean, ApplicationEventPublisherAware {
private ApplicationEventPublisher applicationEventPublisher;
public void test() {
applicationEventPublisher.publishEvent(new TestEvent(this));
}
}
Run Code Online (Sandbox Code Playgroud)
我的监听器事件是这样的:
@Component
@Scope("request")
@KeepAlive
public class Module implements ApplicationListener<TestEvent> {
@Override
public void onApplicationEvent(TestEvent event) {
}
}
Run Code Online (Sandbox Code Playgroud)
最重要的一点是这些 bean 是范围请求,因为它们需要在每次调用页面时进行初始化。
但在启动时,我收到以下消息:
引起原因:java.lang.IllegalStateException:未找到线程绑定请求:您是指实际 Web 请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上在 Web 请求中进行操作并且仍然收到此消息,则您的代码可能在 DispatcherServlet/DispatcherPortlet 之外运行:在这种情况下,请使用 RequestContextListener 或 RequestContextFilter 公开当前请求。
就像如果 Spring 尝试在启动时实例化我的模块 bean,并且由于该 bean 是作用域请求,它就无法执行此操作(上下文请求未实例化)
如果我删除事件管理,一切都会正常。
所以,我的问题是:
是否可以将事件侦听器作为范围请求?以及如何做到这一点?
谢谢
我在生产中有一个 nodejs 应用程序,我有内存泄漏(内存在 3 天内从 600Mo 增加到 3Go)。
我搜索了一些工具来进行内存转储,但我只找到了需要在应用程序中写入转储的插件。
当然,我不能停止我的应用程序并重新启动它(修改后)以获取快照,我想使用外部工具在节点外进行内存转储。
你知道这样的工具吗?
谢谢。
java ×4
java-ee ×3
jsf ×2
angular-dart ×1
angularjs ×1
cdi ×1
dagger ×1
dart ×1
database ×1
ejb-3.1 ×1
flash-scope ×1
hibernate ×1
javafx-2 ×1
jpa ×1
jsf-2 ×1
lifecycle ×1
memory-leaks ×1
navigation ×1
node.js ×1
properties ×1
richfaces ×1
seam ×1
spring ×1
xml ×1