如何在两个网络应用程序之间导航?

时间:2013-05-17 17:01:19

标签: java jsf primefaces

如果我有两个网络应用http://www.abc.com/app1http://www.abc.com/app2,如何处理两者之间的导航?

我希望能够使用侧边栏中的菜单中的链接导航到app2 ...

<p:menu>  
  <p:menuitem outcome="/index" value="Home" icon="ui-icon-home"/>  
  <p:submenu label="app1">
    <p:menuitem outcome="/page1" value="page1" />  
    <p:menuitem outcome="/page2" value="page2" />  
  </p:submenu>  
  <p:submenu label="app2">
    <!-- all the links below should point to pages in app2 -->
    <p:menuitem outcome="/pageA" value="pageA" />  
    <p:menuitem outcome="/pageB" value="pageB" />  
  </p:submenu>  
</p:menu>

显然outcome="/pageA"不起作用,因为它试图在app1中找到一个具有该名称的页面,从而产生404。 我尝试了outcome="/app2/pageA"outcome="../app2/pageA",但这些都没有。还有什么其他选择?

另外,我应该补充一点,我真的不想对网址"http://www.abc.com/app2/pageA"进行硬编码,因为主机名会根据我的部署位置而改变。

2 个答案:

答案 0 :(得分:2)

你可以通过以下方式实现它,

Managed Bean:

@ManagedBean  
@ViewScoped
public class YourBean implements Serializable{

String project_path;

public String getProject_path() {
    return project_path;
}

public void setProject_path(String project_path) {
    this.project_path = project_path;
}

@PostConstruct
public void init() {
    HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    project_path = req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort();
}

public YourBean() {
}
}

XHTML:

       <p:menu>
            <p:menuitem outcome="/index" value="Home" icon="ui-icon-home"/>  
            <p:submenu label="app1">
                <p:menuitem url="#{yourBean.project_path}/app1/page1" value="Page1"/>  
                <p:menuitem url="#{yourBean.project_path}/app1/page2" value="Page2"/>  
            </p:submenu>  
            <p:submenu label="app2">
                <p:menuitem url="#{yourBean.project_path}/app1/pageA" value="PageA"/>  
                <p:menuitem url="#{yourBean.project_path}/app1/pageA" value="PageA"/>   
            </p:submenu>  
        </p:menu>

答案 1 :(得分:1)

您可以在运行时获取主机名(例如this answer),将其存储在托管bean或其他内容中,这样您就不会对URL进行硬编码,只有当两个应用程序都在相同的情况下才会起作用主机名。