相关疑难解决方法(0)

如何选择合适的bean范围?

我注意到有不同的bean范围,如:

@RequestScoped
@ViewScoped
@FlowScoped
@SessionScoped
@ApplicationScoped
Run Code Online (Sandbox Code Playgroud)

每个人的目的是什么?如何为我的bean选择合适的范围?

jsf scope jsf-2 managed-bean

372
推荐指数
2
解决办法
20万
查看次数

我应该何时使用h:outputLink而不是h:commandLink?

我什么时候应该使用<h:outputLink>而不是<h:commandLink>

我知道a commandLink生成一个HTTP帖子; 我猜这outputLink将产生HTTP获取.也就是说,我读过的大多数JSF教程材料都是commandLink(几乎?)使用的.

上下文:我正在实现一个小的演示项目,它显示了一个到用户页面的标题链接,就像Stack Overflow的......

需要更多的jquery

......我不确定commandLink(可能是?faces-redirect=true用于书签)还是outputLink正确的选择.

jsf jsf-2

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

ViewParam vs @ManagedProperty(value ="#{param.id}")

定义View Params之间有什么区别:

<f:metadata>
  <f:viewParam name="id" value="#{someBean.id}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)

并在ManagedBean中定义属性,如下所示:

@ManagedProperty(value = "#{param.id}")
private Integer id;
Run Code Online (Sandbox Code Playgroud)

jsf jsf-2 managed-bean viewparams managed-property

95
推荐指数
2
解决办法
5万
查看次数

何时使用f:viewAction/preRenderView与PostConstruct?

什么时候应该使用f:viewActionor preRenderView事件来初始化页面的数据而不是使用@PostConstruct注释?基于支持bean的范围类型使用一个或另一个的基本原理例如,如果支持bean是@RequestScoped,那么在呈现视图之前选择使用f:viewActionpreRenderView覆盖@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)

jsf postconstruct jsf-2 prerenderview viewaction

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

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

有没有办法在加载页面时执行JSF托管bean操作?

如果那是相关的,我现在正在使用JSF 1.2.

jsf action onload managed-bean

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

如何在JSF中导航?如何使URL反映当前页面(而不是前一页)

我正在学习JSF,当我意识到每当我们使用时<h:form>,JSF的标准行为总是向我显示浏览器中上一页的URL ,而不是当前页面的URL,我感到非常惊讶和困惑.

我知道这与JSF总是将表单发布到同一页面的方式有关,然后只是呈现控制器将其返回给浏览器的任何页面,而浏览器不知道页面位置已更改.

似乎JSF已经存在了足够长的时间,必须有一个干净,可靠的方法来处理这个问题.如果是这样,你介意分享吗?

我找到了各种解决方法,但遗憾的是,这似乎不是一个真正可靠的解决方案.

  • 只需接受该网址具有误导性.
  • 附加"?faces-redirect=true"每个 bean的操作的返回值然后
    • 弄清楚如何@RequestScoped用其他东西替换(Flash Scopes,CDI对话,@ SessionScoped,......).
    • 接受为每个用户操作进行两次HTTP往返.
  • 使用某种方法(例如第三方库或自定义代码)隐藏URL中的页面名称,始终对每个页面使用相同的通用URL.

如果它"?faces-redirect=true"是如此好,有没有办法配置整个应用程序以这种方式处理所有请求?

navigation url jsf redirect

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

如何在页面加载时处理辅助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万
查看次数

如何在@PostConstruct期间添加Faces消息

在一个支持bean的@PostConstruct方法中,我调用了一个EJB,它可能会返回一些我希望通过p:messages在页面上显示的消息.但是,即使我添加FacesMessages,例如FacesContext.getCurrentInstance().addMessage(...),也不会使用FacesMessages更新p:messages.

如果我不是调用从页面的动作调用EJB(比如用户点击它调用调用EJB的方法在页面上的一个按钮,然后添加的FacesMessage(S)),那么messags显示用对:消息按预期.

如何在@PostConstruct期间添加Faces消息并在最初呈现页面时显示它们?

码:

Page1Controller.java:

@ManagedBean
public class Page1Controller
{
    @PostConstruct
    public void init()
    {
        FacesContext.getCurrentInstance().addMessage(null, 
            new FacesMessage("Test Message from @PostConstruct"));
    }

    public String getValue()
    {
            return "Some Value";
    }

    public void triggerMessage(ActionEvent event)
    {
            FacesContext.getCurrentInstance().addMessage(null, 
                    new FacesMessage("Test Message from Trigger Button"));      
    }

}
Run Code Online (Sandbox Code Playgroud)

page1.xhtml

   <h:form>
        <p:messages showDetail="true" showSummary="true" autoUpdate="true"/>
        <h:outputText value="#{page1Controller.value}"/>
        <br/>
        <p:commandButton value="Trigger Message" 
                         actionListener="#{page1Controller.triggerMessage}"/>  
   </h:form>
Run Code Online (Sandbox Code Playgroud)

jsf message pageload postconstruct

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

在JSF表单提交上保留GET请求查询字符串参数

我有3页:

  • main.xhtml
  • agreement.xhtml
  • generated.xhtml

agreement.xhtml需要两个参数正确加载:serviceIdsite.所以,正常的网址看起来像这样:/app/agreement.xhtml?site=US&serviceId=AABBCC.

我有这个按钮 agreement.xhtml

<h:form>
   <h:commandButton value="Generate License File" action="#{agreement.generateMethod}" />   
</h:form>
Run Code Online (Sandbox Code Playgroud)

@RequestScoped#{agreement}有这样的方法:

public String generateMethod(){
    .......
    return "generated";
}
Run Code Online (Sandbox Code Playgroud)

我需要,在点击时,generateMethod()方法被执行,完成后,用户被重定向到generated.xhtml页面.发生了什么事是,在点击,网页浏览器发送的用户/app/agreement.xhtml,而且由于它不发送参数siteserviceId,它崩溃.

我尝试过generateMethod()返回a "generated?faces-redirect=true",但仍然没有.有任何想法吗?

navigation jsf jsf-2 http-request-parameters

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

我应该如何以及何时从数据库中为h:dataTable加载模型

我有一个数据表如下:

<h:dataTable value="#{bean.items}" var="item">
Run Code Online (Sandbox Code Playgroud)

我想用从服务方法获得的数据库中的集合填充它,以便在初始(GET)请求期间打开页面时立即显示它.我什么时候应该打电话给服务方法?为什么?

  1. 在加载页面之前调用它.但是怎么样?
  2. 在页面加载期间调用它.怎么样?
  3. 在getter方法中调用它.但它被多次调用.
  4. 别的什么?

datatable getter jsf loading

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