我已经尝试了很多方法来解决这个问题,但没有成功。我发现,如果我们使用“abstractBinder”,那么这可以解决,但是一旦我的 Binder 就位,我就开始出现 404 错误。
UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl
Run Code Online (Sandbox Code Playgroud)
请帮忙
我的资源:
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.walmart.services.helpers.IUserService;
import com.walmart.services.helpers.ServicesTest;
@Path("/sayHello")
public class ControllerTest {
@Inject
private IUserService service;
@Inject
private ServicesTest service2;
@GET
@Path("/{name}")
@Produces(MediaType.TEXT_PLAIN)
public String method(@PathParam("name") String msg) {
return service.method() + " msg";
}
@GET
@Path("/v2/{name}")
@Produces(MediaType.TEXT_PLAIN)
public String method2(@PathParam("name") String msg) {
return service2.method() + " msg";
}
}
Run Code Online (Sandbox Code Playgroud)
我的资源配置文件:
@ApplicationPath("/rest/*")
public …
Run Code Online (Sandbox Code Playgroud) 在我的JSF页面中,这有效:
${requestScope.put('test', 'data')}
${requestScope.get('test')}
Run Code Online (Sandbox Code Playgroud)
这会导致异常:
${viewScope.put('test', 'data')}
${viewScope.get('test')}
Run Code Online (Sandbox Code Playgroud)
例外:
java.lang.NullPointerException
javax.el.BeanELResolver.invoke(BeanELResolver.java:159)
javax.el.CompositeELResolver.invoke(CompositeELResolver.java:84)
org.apache.el.parser.AstValue.getValue(AstValue.java:157)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
com.sun.faces.facelets.el.ELText$ELTextVariable.writeText(ELText.java:238)
com.sun.faces.facelets.el.ELText$ELTextComposite.writeText(ELText.java:154)
com.sun.faces.facelets.compiler.TextInstruction.write(TextInstruction.java:85)
com.sun.faces.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:82)
com.sun.faces.facelets.compiler.UILeaf.encodeAll(UILeaf.java:183)
javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:456)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Run Code Online (Sandbox Code Playgroud)
如何requestScope
在JSF页面以外使用?我当然可以有一个视图范围的bean,但我认为我可以直接使用范围变量.我有Mojarra 2.2.10的Tomcat 8.0.21.
我按照这里的快速设置来运行DDS.我确信我做的正确,但是当我尝试针对测试应用程序的REST GET请求时,它只会一直返回404.有什么方法可以在服务器级别验证我的设置吗?
在我的服务器日志中,当我发出请求时,我看到:
HTTP Web服务器:找不到设计说明 - api/data/documents [/test/testmissupport.nsf/api/data/documents]匿名
我最近遇到了很多关于消失Java类级别Domino对象的问题.例如,我将a放置lotus.domino.Session
到(非静态)类级变量,当我尝试在下一个代码行中使用它时,我得到:
NotesException: Object has been removed or recycled
Run Code Online (Sandbox Code Playgroud)
在我开始使用托管bean之前我没有遇到这些问题,但现在我似乎总是使用请求范围的bean以及普通的Java对象来获取它们.我一直在isRecycled()
给很多地方添加支票,并一直想知道为什么我以前不必这样做.我知道Domino对象不是序列化的,而是在它们停留在请求或代理的持续时间之前.
今天我复制了将此异常的代码复制到另一个db,并且没有发生异常.然后我将xsp.properties从该db 复制到原始db,并且在那里也没有发生异常.通过一次删除一行,我发现如果我有这个:
xsp.application.timeout=10
Run Code Online (Sandbox Code Playgroud)
我没有得到异常,如果我删除它,我得到例外.有谁理解为什么?默认值应为30分钟,但我的会话对象似乎在纳秒内消失,除非我设置应用程序超时.我将会话从SSJS传递给Java并将其存储在构造函数代码中:
private Session session;
public Domino(Session session) {
this.session = session;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这不是托管bean.我测试的Domino版本是9.0.1但我需要在8.5.2中使用此代码.代码在beforePageLoad
事件中运行.
似乎我的问题已经解决但我想了解这里发生了什么.
UPDATE1
如果我等待一段时间(可能超过10分钟)然后重新加载XPage,我仍然会在主数据库中收到错误.在另一个db我从来没有得到错误.
UPDATE2
昨天我从数据库中添加了完整的xsp.properties,它一直在工作.现在8小时后它仍然可以在我的原始数据库中正常工作.看起来我也需要这个:
xsp.persistence.mode=basic
Run Code Online (Sandbox Code Playgroud)
这意味着"将页面保留在内存中".似乎XPage在没有此设置的情况下立即(在单个HTTP请求中)被序列化.
el ×1
facelets ×1
hk2 ×1
java-ee-8 ×1
jersey ×1
jersey-2.0 ×1
jsf ×1
jsf-2 ×1
lotus-domino ×1
lotus-notes ×1
rest ×1
tomcat9 ×1
view-scope ×1
xpages ×1
xpages-ssjs ×1