我使用 myfaces 和 richfaces 创建了一个简单的主/细节。通过单击 rich:dataTable 中的 ah:commandLink,用户可以打开详细视图并编辑实体。
现在我想创建一个允许用户直接打开详细视图的 URL。通常我会通过创建像 /detail.jsp?id=12 这样的 URL 来实现这一点 - 我如何使用 JSF 实现这一点?
您可以使用链接控件上的参数构造 URL:
<h:outputLink value="reqscope.faces">
<f:param name="id" value="#{row.id}" />
<h:outputText value="link" />
</h:outputLink>
在目标页面上,您可以直接使用表达式语言或通过托管 bean 从参数映射中读取 id。
看法:
<f:view>
id= <h:outputText value="#{param['id']}" />
<br />
id= <h:outputText value="#{lookupBean.id}" />
</f:view>
豆:
public class LookupBean implements Serializable {
public String getId() {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext extContext = context.getExternalContext();
Map<String, String> params = extContext.getRequestParameterMap();
return params.get("id");
}
}
faces-config.xml 声明:
<managed-bean>
<managed-bean-name>lookupBean</managed-bean-name>
<managed-bean-class>reqscope.LookupBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
我使用 a4j:commandlink 首先将要显示详细信息的实体的 id 传递给详细信息视图 bean。然后我只需使用 document.location 导航到视图。
<a4j:commandLink action="#{detailviewBean.setDetailID(entity.someid)}" value="#{entity.someid}" oncomplete="document.location='/app/detailview.seam'"/>
如果您使用的是 JSF 1.2,则可以使用 f:setPropertyActionListener:
<h:commandLink action="#{reqscope.faces}">
<h:outputText value="link"/>
<f:setPropertyActionListener
value="#{id}"
target="#{lookupBean.id}"/>
</h:commandLink>