【问题标题】:jsf navigation including content pages via ajaxjsf 导航,包括通过 ajax 的内容页面
【发布时间】:2013-09-10 04:59:14
【问题描述】:

我有一个无法解决的问题,或者至少我对 jsf 的了解有限。 我知道在 stackoverflow 上可以找到一些好的解决方案,但我无法弄清楚我的错误。

我只想拥有一些命令链接,例如导航栏,它们应该更改包含包含子句的预定义 div 标签的内容。所以我想我的索引可以被重新解释为一种模板。

我的索引:

 <h:panelGroup id="navigation" layout="block">
   <h:form>
     <h:panelGrid columns="4" columnClasses="colDefault,colDefault,colDefault,colDefault">
       <f:ajax render=":include">

          <h:commandLink value="entry1" action="#{menuController.setPage('login')}" />
          <h:commandLink value="entry2" action="#{menuController.setPage('register')}" />
          <h:commandLink value="entry3" action="#{menuController.setPage('welcome')}" />
       </f:ajax>
     </h:panelGrid>

   </h:form>
  </h:panelGroup>
  <h:panelGroup id="center_content" layout="block" class="center_content" >
     <h:panelGroup id="include">

        <ui:include src="#{menuController.page}.xhtml" />

     </h:panelGroup>
   </h:panelGroup>

就像在 BalusC 的这篇文章中一样 用一个小而简单的豆子:

@ManagedBean
 public class MenuController implements Serializable{

private String page;


public String getPage() {
    return page;
}

public void setPage(String page) {
    this.page = page;
}
}

但我得到了一个 TagAttributeException @

/index.xhtml @17,92 action="#{menuController.setPage('login')}" Could not Resolve Variable [Overflow]: menuController

我试过了,但我不知道该怎么做。

【问题讨论】:

  • #{menuController.setPage('login')} 这在您发布的代码中无处可见。你错过了一些代码吗?
  • 已编辑,是的,我复制了一个测试版本
  • 您运行的是 Servlet 3.0 / EL 2.2 吗?

标签: ajax jsf jsf-2 java-ee-7


【解决方案1】:

你需要把bean放在一个固定的范围内:

@ManagedBean
@ViewScoped
public class MenuController implements Serializable {}

您需要使用默认值预初始化page

private String page;

@PostConstruct
public void init() {
    page = "login"; // Default value.
}

【讨论】:

  • ups,当然,感谢您的帮助,BalusC!永远欣赏你的工作:)
猜你喜欢
  • 2017-03-15
相关资源
最近更新 更多