【问题标题】:How do you navigate between two web apps?如何在两个 Web 应用程序之间导航?
【发布时间】:2013-05-17 17:01:18
【问题描述】:

如果我有两个 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",因为主机名会根据我的部署位置而改变。

【问题讨论】:

  • 你试过绝对网址 - abc.com/app2/pageA 吗?
  • 是的,我编辑我的问题有点太慢了 - 这对我来说是不合适的,因为主机名会根据我的应用程序部署在哪台机器上而改变

标签: java jsf primefaces


【解决方案1】:

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

托管 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>

【讨论】:

  • 我建议将托管 bean 设为 @ApplicationScoped,因为此信息只会在部署应用程序时更改。
  • @LuiggiMendoza 你说得对,project_path 应该是 ApplicationScoped
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    相关资源
    最近更新 更多