如何从JSF页面获取JAX-RS绝对路径?
对不起,我刚刚开始学习EJB、JSF和JAX-RS的内容,现在需要您的帮助。 我创建了一个JAX-RS资源类,它工作得很好,实现了@GET、@PUT等方法 在同一个项目中,我现在使用相应的BackBean创建了一个JSF页面。此Backbean应与REST接口通信。在测试时,我将REST接口的URI硬编码到bean中,但是我当然希望通过编程获得URI。我尝试使用@products方法和注入,但总是得到一个非法状态异常。我认为这与上下文有关,但实际上我没有足够的理解来解决它 我的休息资源:如何从JSF页面获取JAX-RS绝对路径?,jsf,rest,javabeans,jax-rs,cdi,Jsf,Rest,Javabeans,Jax Rs,Cdi,对不起,我刚刚开始学习EJB、JSF和JAX-RS的内容,现在需要您的帮助。 我创建了一个JAX-RS资源类,它工作得很好,实现了@GET、@PUT等方法 在同一个项目中,我现在使用相应的BackBean创建了一个JSF页面。此Backbean应与REST接口通信。在测试时,我将REST接口的URI硬编码到bean中,但是我当然希望通过编程获得URI。我尝试使用@products方法和注入,但总是得到一个非法状态异常。我认为这与上下文有关,但实际上我没有足够的理解来解决它 我的休息资源: @Pa
@Path("task")
@ManagedBean
@RequestScoped
public class TaskResource {
@Context
private UriInfo context;
@Inject TaskLifecycle lc;
public TaskResource() {
}
@GET
@Path("{id}")
public Response getTask(@PathParam("id") String id) { ... etc.
我的后座:
@ApplicationScoped
@LocalBean
@Named("tmmlWrapper")
public class TmmlTaskWrapperBean implements Serializable {
// Here another ManagedBean is injected, which works fine!
@Inject TaskLifecycle lc;
最后是我的JSF页面:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org
/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Tasklist</title>
</h:head>
<h:body>
<h:form>
<h:outputLabel ><h3>Tasklist:</h3></h:outputLabel>
<h:dataTable value="#{tmmlWrapper.taskList}" var="tl">
<h:column>
<f:facet name="header">ID</f:facet>
#{tl.id}
</h:column> ... and so on ... etc.
任务列表
任务列表:
身份证件
#{tl.id}
... 等等等
我的问题:
我的BackBean如何获取REST资源(例如)的URIhttp://exampledomain:8080/as")?
欢迎任何帮助
干杯,
Joern您首先需要访问底层servlet容器(假定为一个容器,而不是portlet容器)生成的HttpServletRequest对象。使用该对象以以下方式访问HttpServletRequest对象:
HttpServletRequest origRequest = (HttpServletRequest)FacesContext.getExternalContext().getRequest();
该类提供了几种实用方法来获得原始请求的近似表示:
- ,它提供原始请求,而不包含查询字符串
,getScheme
,getServerName
,getServerPort
,getContextPath
,getServletPath
和getPathInfo
所有输出都可以按顺序组合以获得原始请求。如果希望URL的片段更少,则可能必须省略后一个调用getQueryString