查看页面的JSF链接
我有一个带有数据表的页面。我希望表中的某些项链接到相应的视图页 例如,现在我有一个没有链接的表:查看页面的JSF链接,jsf,hyperlink,managed-bean,Jsf,Hyperlink,Managed Bean,我有一个带有数据表的页面。我希望表中的某些项链接到相应的视图页 例如,现在我有一个没有链接的表: <h:dataTable var="bean" value="#{beanServiceImpl.beans}" border="1"> <h:column>#{bean.id}</h:column> </h:dataTable> #{bean.id} 我想向某些条目添加超链接,并让它们转到查看页面,根据其id显示更多信息: &l
<h:dataTable var="bean" value="#{beanServiceImpl.beans}" border="1">
<h:column>#{bean.id}</h:column>
</h:dataTable>
#{bean.id}
我想向某些条目添加超链接,并让它们转到查看页面,根据其id显示更多信息:
<h:dataTable var="bean" value="#{beanServiceImpl.beans}" border="1">
<h:column>
<a href="viewBean.xhtml?id=#{bean.id}">#{bean.id}</a>
</h:column>
</h:dataTable>
ViewBean.xhtml将包含如下内容:
ViewBean.xhtml
<ul>
<li>ID: #{bean.id}</li>
<li>Field 1: #{bean.field1}</li>
<li>Field 2: #{bean.field2}</li>
</ul>
- ID:#{bean.ID}
- 字段1:#{bean.field1}
- 字段2:#{bean.field2}
我如何在JSF中完成类似的事情?我知道我必须编写一个控制器来查询其他字段的id。但是如何让viewBean.xhtml运行业务逻辑来获取其他字段并呈现它呢?我将假设JSF 2.x。将此添加到您的
Bean
@ManagedProperty(value="#{param.id}")
private Long id;
(这基本上是一个bean.setId(request.getParameter(“id”))
视图加载时)
它将在@PostConstruct
方法的Bean
中提供
@PostConstruct
public void init() {
// Fill model based on id.
}
BalusC的答案几乎不错,但不起作用(编辑:它现在起作用了) 您已经知道如何将值添加到参数。顺便说一句,如果我是你,我不会使用
,而是:
<h:link outcome='viewBean'>
<f:param name='id' value='#{bean.id}' />
</h:link>
最后一件事:有一个名为“bean”的变量比称它为“variable”(或者有一只狗叫dog,猫叫cat)没有意义。它不携带任何信息,更糟糕的是,它使应用程序中的所有bean都无法区分(除非您构建了豆类管理器)。这就是我所做的
<h:form>
<h:commandLink action="#{bean.populateBean}" value="#{bean.id}">
<f:setPropertyActionListener target="#{bean.id}" value="#{bean.id}" />
</h:commandLink>
</h:form>
我的ViewBean.xhtml是相同的:
<ul>
<li>ID: #{bean.id}</li>
<li>Field 1: #{bean.field1}</li>
<li>Field 2: #{bean.field2}</li>
</ul>
- ID:#{bean.ID}
- 字段1:#{bean.field1}
- 字段2:#{bean.field2}
Uhm。答案显然是错误的-视图参数是标准faces生命周期的一部分,因此当调用@PostConstruct时,请求中的任何值都将不可用。我们需要等待,直到模型值更新。嗨,巴卢斯克,谢谢你的回答。我在下面发布了我的解决方案,因为我认为我们可能解决了不同的问题。您现在触发的是POST请求(带有假链接的表单),而不是GET请求(链接)。这和你最初问的完全不同。但是,如果功能需求确实是发出POST请求,那么请继续您的请求。你永远无法通过(即,它不可书签)调用它。我不是一个可以抱怨的人(好吧,我撒谎了——我现在抱怨得很厉害,不要理我),但BalusC的答案是错误的,只有在我将我的答案发布到同一个答案后才得到修复。然而,我没有得到占我目前状态近1%的15分。巴卢斯的答案是有标记的,这使他获得了他已经得到的0.00000001%的预付款。我有祸了…@BalusC:好多了,虽然我有点惭愧:-)对不起,我希望能弥补这一点。谢谢你的回答+1至于名为“Bean”的变量,我只是将其重命名为更通用的变量,以便我可以将其作为示例发布(甚至field1和field2也是通用的)。我对SO很陌生,但我认为在任何公共论坛上询问编程问题时,这都是正确的。谢谢
public String populateBean(){
Bean bean = BeanServiceImpl.getBean(id); //id was injected by the commandLink
this.field1 = tenure.getField1();
this.field2 = tenure.getField2();
return("viewBean");
}
<ul>
<li>ID: #{bean.id}</li>
<li>Field 1: #{bean.field1}</li>
<li>Field 2: #{bean.field2}</li>
</ul>