0

如果我有两个 Web 应用程序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"但这些都不起作用。还有哪些其他选择?

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

4

2 回答 2

2

您可以通过执行以下操作来实现它,

托管豆:

@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>
于 2013-05-17T19:06:00.343 回答
1

您可以在运行时获取主机名(例如this answer),将其存储在托管bean或其他东西中,因此您不会对URL进行硬编码,这仅在两个应用程序位于相同主机名下时才有效。

于 2013-05-17T17:35:42.177 回答