Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从JSF页面获取JAX-RS绝对路径?_Jsf_Rest_Javabeans_Jax Rs_Cdi - Fatal编程技术网

如何从JSF页面获取JAX-RS绝对路径?

如何从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

对不起,我刚刚开始学习EJB、JSF和JAX-RS的内容,现在需要您的帮助。 我创建了一个JAX-RS资源类,它工作得很好,实现了@GET、@PUT等方法

在同一个项目中,我现在使用相应的BackBean创建了一个JSF页面。此Backbean应与REST接口通信。在测试时,我将REST接口的URI硬编码到bean中,但是我当然希望通过编程获得URI。我尝试使用@products方法和注入,但总是得到一个非法状态异常。我认为这与上下文有关,但实际上我没有足够的理解来解决它

我的休息资源:

@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
    getQueryString
    所有输出都可以按顺序组合以获得原始请求。如果希望URL的片段更少,则可能必须省略后一个调用