任何人都可以澄清我们如何在一般情况下使用,或者在现实世界中使用这个代码片段?
<f:metadata>
<f:viewParam id="id" value="#{bean.id}" />
<f:viewAction action="#{bean.init}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud) 在JSF 2中,h:button和之间有什么区别h:commandButton?
有没有办法在加载页面时执行JSF托管bean操作?
如果那是相关的,我现在正在使用JSF 1.2.
我相信有两种方法可以从JSF中的URL获取参数.
一个人在豆里:
Map<String, String> params =FacesContext.getCurrentInstance().
getExternalContext().getRequestParameterMap();
String parameterOne = params.get("parameterOne");
Run Code Online (Sandbox Code Playgroud)
另一个在facelets页面中
<f:metadata>
<f:viewParam name="parameterOne" value="#{bean.parameterOne}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
显然后者需要类中的字段和getter/setter.
除此之外,这两种不同方法之间有什么区别?应该首选哪一个?
什么时候应该使用preRenderView事件来初始化页面的数据而不是使用viewAction?它们在使用上是否相同,是否具有相同的效果?
preRenderView事件
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
要么
的viewAction
<f:metadata>
<f:viewAction action="#{myBean.initialize}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud) 我在GlassFish上使用JSF 2和PrimeFaces 2.1.
我有一个页面,旨在允许人们在关注回调URL后执行操作(例如,作为电子邮件中嵌入的链接或某些外部身份验证或支付服务的回调URL参数).在我的情况下,我需要重置密码.回调URL有一个tokenGET参数,如下所示:
http://example.com/app/resetPasswordForm.jsf?token=abc123
在页面加载时resetPasswordForm.jsf,我需要检查令牌是否有效并重定向到主应用程序屏幕,如果它无效.
我的想法是有一个bean方法,如:
public String resetPasswordHandler.showResetForm(String token) {
if /* token is valid */ {
return "resetPasswordForm.jsf";
} else {
return "main.jsf";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如何在页面加载时使该方法受到影响?
不知道如何进行 - 欢迎提出建议.
我从什么可以<f:metadata>,<f:viewParam>和<f:viewAction>开始?
我有一个预呈现视图事件监听器:
<f:metadata>
<f:event type="preRenderView" listener="#{loginBean.performWeakLogin()}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
它调用以下方法:
public String performWeakLogin() {
FacesContext facesContext = FacesContext.getCurrentInstance();
String parameter_value = (String) facesContext.getExternalContext().getRequestParameterMap().get("txtName");
if (parameter_value != null && parameter_value.equalsIgnoreCase("pippo")) {
try {
return "mainPortal";
} catch (IOException ex) {
return null;
}
} else {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
和以下导航规则:
<navigation-rule>
<from-view-id>/stdPortal/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>mainPortal</from-outcome>
<to-view-id>/stdPortal/stdPages/mainPortal.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
Run Code Online (Sandbox Code Playgroud)
但是,它不执行导航.它使用命令按钮时,如下所示:
<p:commandButton ... action="#{loginBean.performWeakLogin()}" />
Run Code Online (Sandbox Code Playgroud) 我有一个CDI托管bean,我想将请求参数设置为托管属性:
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
@Named
@RequestScoped
public class ActivationBean implements Serializable {
@ManagedProperty(value="#{param.key}")
private String key;
@ManagedProperty(value="#{param.id}")
private Long id;
// Getters+setters
Run Code Online (Sandbox Code Playgroud)
domain/activate.jsf?key=98664defdb2a4f46a527043c451c3fcd&id=5但是,URL是永远不会设置和保留的属性null.
这是怎么造成的,我该如何解决?
我知道我可以从ExternalContext下面手动抓取它们:
Long id = Long.parseLong(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"), 10);
String key = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("key");
Run Code Online (Sandbox Code Playgroud)
但是,我宁愿使用注射剂.
jsf cdi managed-bean http-request-parameters managed-property
我正在尝试实现一个用户名列表,可以通过单击UP或DOWN链接重新排列.
<ul>
<ui:repeat var="user" value="#{cc.attrs.value}">
<li>
#{user.name}
<h:link outcome = "user" value = "left" onclick="#{accountController.moveDown}">
<f:param name="id" value = "${user.id}" />
</h:link>
</li>
</ui:repeat>
</ul>
Run Code Online (Sandbox Code Playgroud)
这里的问题是我似乎没有正确使用onclick属性.这样做的正确方法是什么?
编辑:根据您的建议,我将所有链接放在一个表单中:
<h:form>
<ui:repeat value="#{cc.attrs.value}" var = "user">
<div class = "user">
<h:commandLink id = "Link1" value = "Up" binding = "#{accountController.ommandLink}" action = "#{accountController.moveUserUp}">
<f:attribute name = "userId" value = "#{user.id}" />
</h:commandLink>
<h:commandLink id = "Link2" value = "Down" binding = "#{accountController.commandLink}" action = "#{accountController.moveUserDown}">
<f:attribute name = …Run Code Online (Sandbox Code Playgroud) 我试图在页面加载时初始化一个支持bean.已经寻找了许多解决方案,但大多数都使用链接,按钮或根本没有参数.
场景: 客户登录到站点,然后应该在下一页上看到他的所有数据.
支持豆类:
loginDetailsController - 支持登录过程.可以访问用户的密码和用户名.Login.xhtml的支持bean.
customerController - 访问其余的用户详细信息.它还有一个customer_id字段.它是Home.xhtml的Backing bean.可以完全从customer_id初始化customerController.
在Home.xhtml上,可以通过这种方式获得customer_id:
#{loginDetailsController.customer_id}
Run Code Online (Sandbox Code Playgroud)
有没有办法在页面加载时使用上面的值初始化customerController?
问候,
丹尼尔
jsf ×9
jsf-2 ×8
managed-bean ×2
action ×1
actionmethod ×1
button ×1
cdi ×1
get ×1
http-get ×1
hyperlink ×1
jsf-2.2 ×1
listener ×1
navigation ×1
onclick ×1
onload ×1
query-string ×1
viewaction ×1
viewparams ×1