任何人都可以澄清我们如何在一般情况下使用,或者在现实世界中使用这个代码片段?
<f:metadata>
<f:viewParam id="id" value="#{bean.id}" />
<f:viewAction action="#{bean.init}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud) 我什么时候应该使用<h:outputLink>
而不是<h:commandLink>
?
我知道a commandLink
生成一个HTTP帖子; 我猜这outputLink
将产生HTTP获取.也就是说,我读过的大多数JSF教程材料都是commandLink
(几乎?)使用的.
上下文:我正在实现一个小的演示项目,它显示了一个到用户页面的标题链接,就像Stack Overflow的......
......我不确定commandLink
(可能是?faces-redirect=true
用于书签)还是outputLink
正确的选择.
我在JSF 2应用程序中使用Primefaces.我有一个<p:dataTable>
,而不是选择行,我希望用户能够直接对各行执行各种操作.为此,我<p:commandLink>
在最后一栏中有几个.
我的问题:如何将行ID传递给命令链接启动的操作,以便我知道要对哪一行进行操作?我尝试使用<f:attribute>
:
<p:dataTable value="#{bean.items}" var="item">
...
<p:column>
<p:commandLink actionListener="#{bean.insert}" value="insert">
<f:attribute name="id" value="#{item.id}" />
</p:commandLink>
</p:column>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
但它总是产生0 - 显然在f
呈现属性时行变量不可用(当我使用固定值时它可以工作).
有人有替代解决方案吗?
什么时候应该使用f:viewAction
or preRenderView
事件来初始化页面的数据而不是使用@PostConstruct
注释?基于支持bean的范围类型使用一个或另一个的基本原理例如,如果支持bean是@RequestScoped
,那么在呈现视图之前选择使用f:viewAction
或preRenderView
覆盖@PostConstruct
初始化支持bean是不相关的,因为两者会结果是一样的吗?
f:viewAction或preRenderView
<f:metadata>
<f:viewAction action="#{myBean.initialize}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
要么
@PostConstruct
public class MyBean
{
@PostConstruct
public void initialize()
{
}
}
Run Code Online (Sandbox Code Playgroud) 由于CDI(及其实现Weld),JEE6中的每个POJO都可以注释@Named
,这使得POJO可以被视图访问.
这是否意味着ManagedBeans现在已经完全过时了?还是我错过了@ManagedBean
仍然有意义的东西?
我有一个product.xhtml和一个ProductBean.我使用/ product/{id}来访问产品,所以我在product.xhtml中有一个viewParam,其值为value = ProductBean.id.问题是在bean内部我使用带有PostConstruct注释的init函数来填充产品的细节.为此,我需要id来调用外部函数.我想虽然在viewParam设置bean的id之前调用了init,因此在init中我无法调用外部函数,因为id尚未设置.我做错了什么,如何解决这个问题?
UPDATE
我发现了什么问题.我认为viewParam方法适用于CDI bean,但ManagedProperty方法适用于JSF bean.
我现在还有另一个问题.我的CDI bean是RequestScoped,当渲染product.xhtml时,bean被创建,我猜想以后会被丢弃.有趣的是,我在该bean中有一个函数,当我调用时,我可以读取id(我认为这是因为连接到视图参数)而不是任何其他属性.任何想法如何解决这一问题?
在JSF + Seam中更改语言环境的最常用方法之一 - 使用<h:selectOneMenu>
:
<h:form action="#{localeSelector.select}" rendered="false">
<h:selectOneMenu value="#{localeSelector.language}" onchange="submit()">
<f:selectItem itemLabel="English" itemValue="en" />
<f:selectItem itemLabel="Francais" itemValue="fr" />
</h:selectOneMenu>
</h:form>
Run Code Online (Sandbox Code Playgroud)
我想用按钮实现区域设置更改.所以,问题是 - 如何传递参数(en,fr等)来更新bean <h:commandButton>
?也许<h:inputHidden>
会有所帮助?
我还没有找到通过URL参数将参数传递给JSF页面的方法.
http://www.example.com/jsfApp.jsp?param1=value1¶m2=value2
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向吗?
也许有人可以启发我.
如果放
<f:metadata>
<f:viewParam name="test" value="#{test.value}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
在模板内,设置者
setValue永远不会被调用,即调用preRender方法'call()'而不事先调用setter(参见下面的代码示例以供参考).
但是,如果将元数据块放在合成中,则会按预期调用它.
这是正常行为还是我做错了什么?
非常感谢任何见解.
Hanspeter
供参考,这里是非工作版本的完整代码示例:
testtemplate.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets">
<f:metadata>
<f:viewParam name="test" value="#{test.value}"/>
</f:metadata>
<f:event type="preRenderView" listener="#{test.call}" />
<h:head>
<title>Test Template</title>
</h:head>
<h:body>
<ui:insert name="text" />
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
testcomposition.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
template="/templates/testtemplate.xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<ui:define name="text">
some text
</ui:define>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)
这里是工作 …
jsf ×9
jsf-2 ×8
viewparams ×3
viewaction ×2
commandlink ×1
composition ×1
datatable ×1
facelets ×1
get ×1
java-ee ×1
jboss-weld ×1
managed-bean ×1
seam ×1