相关疑难解决方法(0)

如何选择合适的bean范围?

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

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

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

jsf scope jsf-2 managed-bean

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

支持bean(@ManagedBean)或CDI Beans(@Named)?

我刚开始阅读Core JavaServer Faces,第3版.他们这样说(强调我的):

对于可以在JSF页面中使用的bean,有两种不同的机制,CDI bean和JSF托管bean,这是一个历史事故.我们建议您使用CDI bean,除非您的应用程序必须在像Tomcat这样的普通servlet运行器上运行.

为什么?他们没有提供任何理由.我一直在使用@ManagedBean在GlassFish 3上运行的原型应用程序中的所有bean,我还没有发现任何问题.我不介意迁移@ManagedBean@Named,但我想知道为什么我应该打扰.

jsf java-ee cdi jsf-2

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

何时使用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中起作用?应该何时以及如何使用?

在JSF中有很多材料区分value属性和binding属性.

我对这两种方法如何彼此不同感兴趣.鉴于:

public class User {
    private String name;
    private UICommand link;

    // Getters and setters omitted.
}
Run Code Online (Sandbox Code Playgroud)
<h:form>
    <h:commandLink binding="#{user.link}" value="#{user.name}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

value指定属性时会发生什么变化.getter运行以返回bean 的name属性值User.该值将打印到HTML输出.

但我无法理解它是如何binding运作的.生成的HTML如何维护与bean link属性的绑定User

下面是手动美化和注释后生成的输出的相关部分(注意id j_id_jsp_1847466274_1是自动生成的,并且有两个隐藏的输入小部件).我正在使用Sun的JSF RI 1.2版.

<form action="/TestJSF/main.jsf" enctype="application/x-www-form-urlencoded"
    id="j_id_jsp_1847466274_1" method="post"  name="j_id_jsp_1847466274_1">
    <input name="j_id_jsp_1847466274_1" type="hidden" value="j_id_jsp_1847466274_1">
    <a href="#" onclick="...">Name</a>
    <input autocomplete="off" id="javax.faces.ViewState" name="javax.faces.ViewState"
        type="hidden" value="-908991273579182886:-7278326187282654551">
</form>
Run Code Online (Sandbox Code Playgroud)

在哪里binding存放在这里?

jsf binding components jsf-2

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

托管bean和辅助bean之间的区别

我在几个论坛中遇到了"托管bean"和"支持bean"的术语.很多人认为两者都是一样的.但是,似乎有一点点差异.任何人都可以帮助我理解这两个术语之间的确切区别吗?

jsf javabeans managed-bean backing-beans

61
推荐指数
4
解决办法
7万
查看次数

Spring JSF集成:如何在JSF托管bean中注入Spring组件/服务?

我知道托管bean的工作方式类似于控制器,因为您唯一的任务是将视图层与模型"链接"起来.

要使用bean作为托管bean,我必须声明@ManagedBean注释,这样做我可以直接与bean通信JSF.

如果我想在这个managedBean中注入一些组件(来自Spring),我有两种可能的方法:

  1. 在ManagedBean中选择属性(如"BasicDAO dao")并@ManagedProperty(#{"basicDAO"})在属性上方声明.这样做,我"basicDAO"在ManagedBean中从Spring 注入bean .

  2. 在ManagedBean Class中声明了@Controller,然后我将拥有@ManagedBean@Controller注释一起.在物业中"BasicDAO dao"我必须使用@AutowiredSpring.

我的理解是否正确?

integration jsf spring dependency-injection managed-bean

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

如何在Tomcat上安装和使用CDI?

我正在创建我的第一个项目Java EE 7,但我遇到了麻烦.感谢任何帮助.

  • Tomcat 7.0.34
  • JSF 2.2
  • Primefaces 3.5
  • JavaEE的-API-7.0.jar

应用程序启动时,Tomcat日志显示以下消息:

"validateJarFile (C:\...\build\web\WEB-INF\lib\javaee-api-7.0.jar)-jar not loaded. See Servlet 2.3 Spec, section 9.7.2. Offending class: javax/servlet/Servlet .class"
Run Code Online (Sandbox Code Playgroud)

当我点击调用托管bean的按钮时,我收到错误:

Advertência: /index.xhtml @18,66 value="#{indexMB.user}": Target Unreachable, identifier 'indexMB' resolved to null
javax.el.PropertyNotFoundException: /index.xhtml @18,66 value="#{indexMB.user}": Target Unreachable, identifier 'indexMB' resolved to null
Run Code Online (Sandbox Code Playgroud)

IndexMB

@Named("indexMB")
@RequestScoped
public class IndexMB {

private String password;
private String user;

public String loginTest(){
    return (this.user.equals("admin") ? "adminPage" : "inOutPage");
}

// getters and setters
}
Run Code Online (Sandbox Code Playgroud)

的index.xhtml

<html ...>

<f:loadBundle …
Run Code Online (Sandbox Code Playgroud)

jsf tomcat cdi jsf-2.2

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

javax.el.PropertyNotFoundException:属性'foo'在类型java.lang.Boolean上不可读

我有一个看起来像这样的类:

public class ScoreDefinition {

    protected Boolean primary;

    public Boolean isPrimary() {
        return primary;
    }

    public void setPrimary(Boolean value) {
        this.primary = value;
    }

}
Run Code Online (Sandbox Code Playgroud)

我试图primary在EL中访问它的属性,如下所示:

<c:forEach var="score" items="${scores}">
    <input type="checkbox"
           value="${score.primary}"
           name="someName"
           class="textField"/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

但我得到了例外:

javax.el.PropertyNotFoundException: Property 'primary' not readable on type java.lang.Boolean
    at javax.el.BeanELResolver$BeanProperty.read(BeanELResolver.java:280)
    at javax.el.BeanELResolver$BeanProperty.access$000(BeanELResolver.java:230)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:81)
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:123)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:938)
    at org.apache.jsp.WEB_002dINF.views.administer.projectBlocks_jsp._jspx_meth_c_005fforEach_005f2(projectBlocks_jsp.java:806)
    at org.apache.jsp.WEB_002dINF.views.administer.projectBlocks_jsp._jspx_meth_c_005fif_005f2(projectBlocks_jsp.java:709)
    at org.apache.jsp.WEB_002dINF.views.administer.projectBlocks_jsp._jspx_meth_form_005fform_005f0(projectBlocks_jsp.java:245)
    at org.apache.jsp.WEB_002dINF.views.administer.projectBlocks_jsp._jspService(projectBlocks_jsp.java:150)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) …
Run Code Online (Sandbox Code Playgroud)

jsp boolean el propertynotfoundexception

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

javax.el.PropertyNotFoundException:在com.example.Bean类型上找不到属性'foo'

我有结果

Query query = session.createQuery("From Pool as p left join fetch p.poolQuestion as s");
Run Code Online (Sandbox Code Playgroud)

查询,我想在JSP上显示它.

我有循环:

<c:forEach items="${pools}" var="pool"> 

    <p>${pool.name}</p>

</c:forEach>
Run Code Online (Sandbox Code Playgroud)

我想显示poolQ​​uestion表(连接表)的结果.我想要显示的值是"回答".

我该怎么做?

<c:forEach items="${pools}" var="pool"> 
    <p>${pool.answer}</p>
    <p>${pool.name}</p>             
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用.

错误是:

  org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/views/home.jsp at line 21

18:     <c:forEach items="${pools}" var="pool"> 
19:             
20:             <p>${pool.name}</p>
21:             <c:out value="${pool.poolQuestion.answer}"/>
22:             
23:     </c:forEach>
24: 

    SEVERE: Servlet.service() for servlet appServlet threw exception
javax.el.PropertyNotFoundException: Property 'answer' not found on type com.pool.app.domain.Pool
    at javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:214)
    at javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:191)
    at javax.el.BeanELResolver.property(BeanELResolver.java:300)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:81)
    at …
Run Code Online (Sandbox Code Playgroud)

jsp jstl el javabeans propertynotfoundexception

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

JSF服务层

我不确定我在JSF中使用MVC环境的方法是否是最好的方法.由于我想要充分利用JSF,我想知道我的服务层(或模型,用MVC术语说)应该如何"设计".

我知道视图 - 控制器比率应该是1比1(排除例外情况).现在我应该以什么方式设计我的服务层?我应该使用一项大型服务(不这么认为)吗?如果没有,根据我应该分割我的服务?

注意,我的服务将从Beans(控制器以MVC术语)调用,服务本身将在必要时使用JPA调用DAO.

提前致谢

java model-view-controller jsf service-layer

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