相关疑难解决方法(0)

为什么JSF多次调用getter

假设我像这样指定一个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以这种方式行事?

感谢您的输入!

getter performance jsf el

253
推荐指数
4
解决办法
9万
查看次数

什么可以使用<f:metadata>,<f:viewParam>和<f:viewAction>?

任何人都可以澄清我们如何在一般情况下使用,或者在现实世界中使用这个代码片段?

<f:metadata>
    <f:viewParam id="id" value="#{bean.id}" />
    <f:viewAction action="#{bean.init}" />
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

jsf jsf-2 viewparams viewaction

146
推荐指数
1
解决办法
12万
查看次数

h:button和h:commandButton之间的区别

在JSF 2中,h:button和之间有什么区别h:commandButton

jsf button jsf-2

69
推荐指数
2
解决办法
11万
查看次数

如何在页面加载时处理辅助bean中的GET查询字符串URL参数?

我已经阅读了如何使用JSF发送参数但是如果用户companyId在访问其登录页面时在URL中键入它们会怎么样?例如,

http://my.company.url/productName/login.faces?companyId = acme.

我们现在的方式是,有一些scriptlet代码可以从请求中获取值,然后在会话中设置它.该参数从登录页面开始改变其外观,因此每个客户可以具有不同的登录页面视图.在切换到JSF之前,我们正在使用extj.

有没有办法使用JSF 2或PrimeFaces?

jsf query-string jsf-2 managed-bean http-request-parameters

31
推荐指数
3
解决办法
4万
查看次数

在页面加载期间从托管bean设置jsf InputSecret的值

我正在创建一个数据库设置jsf页面,它在页面加载期间显示属性文件的值.然后,用户更新页面并按提交,并在属性文件中更新值.

我遵循了Balusc提供的解决方案

在页面加载时调用JSF托管bean操作

并在辅助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

提前致谢

java jsf

14
推荐指数
1
解决办法
6794
查看次数

如何使用本机JavaScript在HTML DOM事件上调用JSF托管bean?

我需要在HTML DOM load事件期间使用ajax执行JSF托管bean操作方法,类似于jQuery $(document).ready(function() { $.ajax(...) }).我只能在这个项目中使用JSF生成的JavaScript.有没有办法在原生JSF中做到这一点?我可以使用哪个事件或者我可以使用哪个JSF ajax函数?

我正在使用JSF 2.0,Facelets和PrimeFaces.

javascript ajax jsf facelets primefaces

11
推荐指数
1
解决办法
1万
查看次数

在加载时执行支持bean操作?

我想为报告导出页面构建结果页面.此结果页面必须显示导出的状态并提供此导出的下载.

导出以动作方法完成.我可以通过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操作的解决方案,它的请求是文件下载.

jsf richfaces event-handling

9
推荐指数
2
解决办法
3万
查看次数

JSF.在每个页面加载时调用backing bean方法

这是我的情况.

我有带数据表的页面和几个由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)

这里有简单的解决方案

jsf java-ee jsf-2

6
推荐指数
1
解决办法
3万
查看次数

JSF在页面加载之前调用bean方法

我必须在我的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()称为第一件事?

jsf

3
推荐指数
1
解决办法
1万
查看次数

在页面加载时调用托管bean方法

我想知道在页面加载后如何在辅助bean中调用方法.考虑这个场景一旦用户登录成功,他的详细信息将显示在欢迎页面中.说我有login.xhtml和welcome.xhtml我有托管bean LoginController和DetailsController,两者都在SessionScope

DetailsController中有一个名为getDetails()的方法

因为我在getDetails()中读取了DB,所以不推荐从构造函数调用方法

当用户重定向到welcome.xhtml时,如何调用它,一旦重定向,他应该能够看到他的详细信息.

谢谢:)

java jsf-2

1
推荐指数
1
解决办法
9389
查看次数