假设我像这样指定一个outputText组件:
<h:outputText value="#{ManagedBean.someProperty}"/>
Run Code Online (Sandbox Code Playgroud)
如果我在someProperty调用getter for时打印一条日志消息并加载页面,那么注意每个请求多次调用getter是很容易的(在我的情况下发生了两次或三次):
DEBUG 2010-01-18 23:31:40,104 (ManagedBean.java:13) - Getting some property
DEBUG 2010-01-18 23:31:40,104 (ManagedBean.java:13) - Getting some property
Run Code Online (Sandbox Code Playgroud)
如果someProperty计算的值很昂贵,这可能是一个问题.
我用Google搜索了一下,认为这是一个已知问题.一个解决方法是包括一个检查,看看它是否已经计算过:
private String someProperty;
public String getSomeProperty() {
if (this.someProperty == null) {
this.someProperty = this.calculatePropertyValue();
}
return this.someProperty;
}
Run Code Online (Sandbox Code Playgroud)
这个问题的主要问题是你得到大量的样板代码,更不用说你可能不需要的私有变量了.
这种方法有哪些替代方案?没有那么多不必要的代码,有没有办法实现这一目标?有没有办法阻止JSF以这种方式行事?
感谢您的输入!
任何人都可以澄清我们如何在一般情况下使用,或者在现实世界中使用这个代码片段?
<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发送参数但是如果用户companyId在访问其登录页面时在URL中键入它们会怎么样?例如,
http://my.company.url/productName/login.faces?companyId = acme.
我们现在的方式是,有一些scriptlet代码可以从请求中获取值,然后在会话中设置它.该参数从登录页面开始改变其外观,因此每个客户可以具有不同的登录页面视图.在切换到JSF之前,我们正在使用extj.
有没有办法使用JSF 2或PrimeFaces?
我正在创建一个数据库设置jsf页面,它在页面加载期间显示属性文件的值.然后,用户更新页面并按提交,并在属性文件中更新值.
我遵循了Balusc提供的解决方案
并在辅助bean的构造函数中设置值.
public DbSettingsBean()
{
this.setUserName(helper.getValueForProperty("user_name"));
this.setPassword(helper.getValueForProperty("password"));
}
Run Code Online (Sandbox Code Playgroud)
虽然我设法在页面加载期间显示属性文件中的用户名.我无法在页面加载期间显示inputsecret的密码值.它仍然是空白的.
在页面加载期间是否还有其他方法可以显示密码?
我使用的是JSF RI 1.2和Richfaces 3.3.2
提前致谢
我需要在HTML DOM load事件期间使用ajax执行JSF托管bean操作方法,类似于jQuery $(document).ready(function() { $.ajax(...) }).我只能在这个项目中使用JSF生成的JavaScript.有没有办法在原生JSF中做到这一点?我可以使用哪个事件或者我可以使用哪个JSF ajax函数?
我正在使用JSF 2.0,Facelets和PrimeFaces.
我想为报告导出页面构建结果页面.此结果页面必须显示导出的状态并提供此导出的下载.
导出以动作方法完成.我可以通过a执行它commandButton但必须在加载时自动执行.
我怎么能做到这一点?
JSF:
<h:commandButton value="Download report" action="#{resultsView.downloadReport}"/>
Run Code Online (Sandbox Code Playgroud)
支持豆:
public String downloadReport() {
...
FileDownloadUtil.downloadContent(tmpReport, REPORT_FILENAME);
// Stay on this page
return null;
}
Run Code Online (Sandbox Code Playgroud)
澄清:a4j这是可行的吗?我想到了一个Ajax请求触发我的downloadReport操作的解决方案,它的请求是文件下载.
这是我的情况.
我有带数据表的页面和几个由bean支持的按钮.应该使用一些默认属性初始化Bean.可以根据操作更改属性.我从RequestScoped bean和@PostConstruct注释方法开始.但似乎datatable仅适用于View(Session)作用域.现在我的设置看起来像这样:
@ManagedBean
@ViewScoped
public class ProductsTableBean implements Serializable {
private LazyDataModel<Products> productsData;
@Inject
private ProductsFacade model;
public void onPageLoad() {
// here some defaults are set
// ...
System.err.println("onPageLoad called");
}
public void addRow() {
// andhere some defaults redefined
// ...
System.err.println("addRow called");
}
...
Run Code Online (Sandbox Code Playgroud)
和来自jsf页面的片段:
<p:commandButton action="#{productsTableBean.addRow()}"
title="save"
update="@form" process="@form" >
</p:commandButton>
...
<f:metadata>
<f:event type="preRenderView" listener="#{productsTableBean.onPageLoad}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
以下是调用顺序中出现的主要问题,我有以下输出:
onPageLoad called
addRow called
onPageLoad called <-- :(
Run Code Online (Sandbox Code Playgroud)
但我希望addRow成为最后一个被调用的动作,如下所示:
onPageLoad called
addRow called
Run Code Online (Sandbox Code Playgroud)
这里有简单的解决方案
我必须在我的bean上调用一个init方法作为页面加载的第一个操作,我试图#{bean.init}在我的页面的最开始调用,但我已经看到<c:if>测试是在之前执行的init().我有类似的东西
#{bean.init}
<c:if test="#{bean.conditionsCheck}">...</c:if>
Run Code Online (Sandbox Code Playgroud)
并且在conditionsCheck()之前调用该方法init(),我该如何修复它并将其init()称为第一件事?
我想知道在页面加载后如何在辅助bean中调用方法.考虑这个场景一旦用户登录成功,他的详细信息将显示在欢迎页面中.说我有login.xhtml和welcome.xhtml我有托管bean LoginController和DetailsController,两者都在SessionScope
DetailsController中有一个名为getDetails()的方法
因为我在getDetails()中读取了DB,所以不推荐从构造函数调用方法
当用户重定向到welcome.xhtml时,如何调用它,一旦重定向,他应该能够看到他的详细信息.
谢谢:)
jsf ×9
jsf-2 ×5
java ×2
ajax ×1
button ×1
el ×1
facelets ×1
getter ×1
java-ee ×1
javascript ×1
managed-bean ×1
performance ×1
primefaces ×1
query-string ×1
richfaces ×1
viewaction ×1
viewparams ×1