- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在阅读 JBoss 中的这个例子在哪里 @RequestScoped
bean 备份JSF page
用于传递用户凭据信息,然后将其保存在 @sessionScoped bean
中.
这是来自 JBoss docs. 的示例
@Named @RequestScoped
public class Credentials {
private String username;
private String password;
@NotNull @Length(min=3, max=25)
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
@NotNull @Length(min=6, max=20)
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
}
<h:form>
<h:panelGrid columns="2" rendered="#{!login.loggedIn}">
<f:validateBean>
<h:outputLabel for="username">Username:</h:outputLabel>
<h:inputText id="username" value="#{credentials.username}"/>
<h:outputLabel for="password">Password:</h:outputLabel>
<h:inputSecret id="password" value="#{credentials.password}"/>
</f:validateBean>
</h:panelGrid>
<h:commandButton value="Login" action="#{login.login}" rendered="#{!login.loggedIn}"/>
<h:commandButton value="Logout" action="#{login.logout}" rendered="#{login.loggedIn}"/>
</h:form>
@Entity
public class User {
private @NotNull @Length(min=3, max=25) @Id String username;
private @NotNull @Length(min=6, max=20) String password;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public String setPassword(String password) { this.password = password; }
}
@SessionScoped @Named
public class Login implements Serializable {
@Inject Credentials credentials;
@Inject @UserDatabase EntityManager userDatabase;
private User user;
public void login() {
List<User> results = userDatabase.createQuery(
"select u from User u where u.username = :username and u.password = :password")
.setParameter("username", credentials.getUsername())
.setParameter("password", credentials.getPassword())
.getResultList();
if (!results.isEmpty()) {
user = results.get(0);
}
else {
// perhaps add code here to report a failed login
}
}
public void logout() {
user = null;
}
public boolean isLoggedIn() {
return user != null;
}
@Produces @LoggedIn User getCurrentUser() {
return user;
}
}
@RequestScoped
bean 被注入(inject)
@SessionScoped
bean 。
RequestScoped
的一个实例上设置的凭证信息有什么保证?与注入(inject)
@SessionScoped
的相同 bean 。为什么不换一个
@RequestScoped
from pool 被注入(inject)甚至是一个新实例?
@SessionScoped
的bean但不是
@Stateful
.我猜
@Stateful
将在这里工作。
@sessionScoped
的生命周期如何? bean 管理?那是它什么时候被摧毁?如果我导航到不同的
JSF
如果我在其中提取信息,例如
currentUser.userName
,我会检索到我在第一个
JSF
中设置的相同信息吗?用于登录的页面。(上面的第 1 步)
@RequestScoped
,然后 Credentials bean 得到
@Dependent
范围是默认范围。
docs中提到了设置
@Dependent
的任何实例变量立即迷路。但我不明白为什么?事实上,这让我想到了
@Dependent
有什么用?范围将是?
@RequestScoped
支持的 JSF bean,每个客户端都可以处理 @RequestScoped
的一个实例池子里的 bean 。事实上,这两个客户端实际上并不在直接实例上工作,而是对作为代理的单个实例的间接引用。客户端使用此代理执行所有方法调用或事务。那么代理持有这个间接引用多久呢?也就是说,在我上面的示例中,@RequestScoped
的实例变量bean ( Credentials
) 在 JSF 中设置。但真正的事实是,实例变量的这种设置通过代理间接发生在@RequestScoped bean 的一个实例上。但是当这个实例被注入(inject) SessionScoped
bean,是被注入(inject)的代理吗?由于 SessionScoped
的生命周期对于客户端和应用程序之间建立的 session ,代理是否也在此生命周期内存在。这是否意味着 single instance of @RequestScoped bean
绑定(bind)到 SessionScoped
和 @RequestScoped
的生命周期bean 实例或其代理由 SessionScoped
的生命周期决定 bean ? 最佳答案
The
@RequestScoped
bean gets injected into@SessionScoped
bean. What is the guarantee that the credential information set on one instance of RequestScoped is the same that is injected into@SessionScopedbean
. why not a different@RequestScoped
from pool gets injected or even a new instance?
An injected reference, or reference obtained by programmatic lookup, is usually a contextual reference.A contextual reference to a bean with a normal scope[...], is not a direct reference to a contextual instance of the bean[...].Instead, the contextual reference is a client proxy object A client proxy implements/extends some or all of the bean types of the bean and delegates all method calls to the current instance of the bean...
这种间接的原因有很多:
容器必须保证当调用任何对正常范围的 bean 的有效注入(inject)引用时,调用总是由注入(inject) bean 的当前实例处理。在某些情况下,例如,如果将请求范围的 bean 注入(inject)到 session 范围的 bean 或 servlet 中,则此规则需要间接引用
也来自 this DZone CDI article :
CDI handles the injection of beans with mismatched scopes through the use of proxies. Because of this you can inject a request scoped bean into a session scoped bean and the reference will still be valid on each request because for each request, the proxy re-connects to a live instance of the request scoped bean
这意味着,在每个注入(inject)点都用代理代替了真实的东西。代理通过扩展/实现它应该模仿的类型的祖先树来模仿在注入(inject)点声明的类型。在您现在实际需要使用该对象时,代理会在当前对话中对请求的 bean 的现有实例执行基于上下文的查找。这是一个请求范围的对象,您可以保证在当前对话/上下文中只有一个实例。
why is the bean given @SessionScoped but not @Stateful. I guess @Stateful will work here.
@Stateful
不会在这里工作,就像我说的 here ,它们并不便宜;除非你真的需要,否则坚持原味 HttpSession
.更不用说一旦 SFSB 的客户端释放 bean,它就会被销毁,即 SFSB 不绑定(bind)到当前 session ,@SessionScoped
是。 how is the lifecycle of @sessionScoped bean managed? That is when does it gets destroyed ?. If I navigate to a different JSF page in which if I pull the information such as currentUser.userName, will I retrieve the same information I set on my first JSF page used to log in. (step 1 above)
@SessionScoped
您指的是:javax.faces.bean.SessionScoped
直接绑定(bind)到当前 HttpSession
/browser session ,所以它在任何时候终止; JBoss 然而implies that javax.enterprise.context.*
scoped beans don't actually go anywhere until the "context" diesThere's actually no way to remove a bean from a context until the entire context is destroyed
@Dependent
就像任何方法局部变量一样:它只有在它的父构造存在时才有用。话虽如此,最好的用途不是支持 JSF View 。它最有用的应用程序是覆盖在 bean 上指定的范围,即席。使用您当前的示例,我可以在我的应用程序的其他地方拥有以下内容:@Inject @New Login aDependentLoginBean; //implicit @Dependent scope applied
@Inject Login aSessionScopedLoginBean; //standard Login bean's scope applied
@Dependent
关于jsf - @RequestScoped bean 实例是如何在运行时提供给 @SessionScoped bean 的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26305295/
好的,所以我想从批处理文件运行我的整个工作环境... 我想要实现什么...... 打开新的 powershell,打开我的 API 文件夹并从该文件夹运行 VS Code 编辑器(cd c:\xy;
我正在查看 Cocoa Controls 上的示例并下载了一些演示。我遇到的问题是一些例子,比如 BCTabBarController ,不会在我的设备上构建或启动。当我打开项目时,它看起来很正常,没
我刚刚开始学习 C 语言(擅长 Java 和 Python)。 当编写 C 程序(例如 hello world)时,我在 ubuntu cmd 行上使用 gcc hello.c -o hello 编译
我在 php 脚本从 cron 开始运行到超时后注意到了这个问题,但是当它从命令行手动运行时这不是问题。 (对于 CLI,PHP 默认的 max_execution_time 是 0) 所以我尝试运行
我可以使用命令行运行测试 > ./node_modules/.bin/wdio wdio.conf.js 但是如果我尝试从 IntelliJ 的运行/调试配置运行它,我会遇到各种不同的错误。 Fea
Error occurred during initialization of VM. Could not reserve enough space for object heap. Error: C
将 Anaconda 安装到 C:\ 后,我无法打开 jupyter 笔记本。无论是在带有 jupyter notebook 的 Anaconda Prompt 中还是在导航器中。我就是无法让它工作。
我遇到一个问题,如果我双击我的脚本 (.py),或者使用 IDLE 打开它,它将正确编译并运行。但是,如果我尝试在 Windows 命令行中运行脚本,请使用 C:\> "C:\Software_Dev
情况 我正在使用 mysql 数据库。查询从 phpmyadmin 和 postman 运行 但是当我从 android 发送请求时(它返回零行) 我已经记录了从 android 发送的电子邮件是正确
所以这个有点奇怪 - 为什么从 Java 运行 .exe 文件会给出不同的输出而不是直接运行 .exe。 当 java 在下面的行执行时,它会调用我构建的可与 3CX 电话系统配合使用的 .exe 文
这行代码 Environment.Is64BitProcess 当我的应用单独运行时评估为真。 但是当它在我的 Visual Studio 单元测试中运行时,相同的表达式的计算结果为 false。 我
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我写了一个使用 libpq 连接到 PostgreSQL 数据库的演示。 我尝试通过包含将 C 文件连接到 PostgreSQL #include 在我将路径添加到系统变量 I:\Program F
如何从 Jenkins 运行 Android 模拟器来运行我的测试?当我在 Execiute Windows bath 命令中写入时,运行模拟器的命令: emulator -avd Tester 然后
我已经配置好东西,这样我就可以使用 ssl 登录和访问在 nginx 上运行的 errbit 我的问题是我不知道如何设置我的 Rails 应用程序的 errbit.rb 以便我可以运行测试 nginx
我编写了 flutter 应用程序,我通过 xcode 打开了 ios 部分并且应用程序正在运行,但是当我通过 flutter build ios 通过 vscode 运行应用程序时,我得到了这个错误
我有一个简短的 python 脚本,它使用日志记录模块和 configparser 模块。我在Win7下使用PyCharm 2.7.1和Python 3.3。 当我使用 PyCharm 运行我的脚本时
我在这里遇到了一些难题。 我的开发箱是 64 位的,windows 7。我所有的项目都编译为“任何 CPU”。该项目引用了 64 位版本的第 3 方软件 当我运行不使用任何 Web 引用的单元测试时,
当我注意到以下问题时,我正在做一些 C++ 练习。给定的代码将不会在 Visual Studio 2013 或 Qt Creator 5.4.1 中运行/编译 报错: invalid types 'd
假设我有一个 easteregg.py 文件: from airflow import DAG from dateutil import parser from datetime import tim
我是一名优秀的程序员,十分优秀!