我正在准备JavaScript中的一些变量(在我的具体情况下,我想获得GPS位置):
function getVars() {
// ...
var x = locationInfo.lng;
var y = locationInfo.lat;
}
Run Code Online (Sandbox Code Playgroud)
我想通过以下命令按钮将它们发送到我的托管bean:
<h:commandButton value="submit" onclick="getVars()" action="#{bean.submit(x,y)}" />
Run Code Online (Sandbox Code Playgroud)
public void submit(int x, int y) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如何将JavaScript x和y变量从JavaScript 发送到JSF托管bean操作方法?
所述的生命周期 @RequestScoped和@SessionScopedBean 管理豆由Servlet容器自身管理,因为它们是基本上作为一个属性存储HttpRequest和HttpSession分别.JSF如何管理生命周期@ViewScopedBean?我知道它是在创建视图时创建的,并且可以使用,直到有回发到另一个视图.但是我发现在我们离开那个视图后不会立即收集垃圾.
我看到很多将bean标记为实体bean(@Entity)和命名bean(CDI)的示例,以避免创建2个类(托管bean和实体bean)以及使用Bean Validation以便可以执行验证在客户端和服务器上.
那么我是否应该使用单个类,是否存在任何问题,或者我是否应该使用托管bean中的数据创建托管bean或服务层创建实体bean?
我有一个JSF托管bean
当从WebSphere AppServer中的JSF页面引用托管bean时,我收到错误.
<h:inputText value=#{bean}/>
Run Code Online (Sandbox Code Playgroud)
bean在faces-config.xml中定义为
<managed-bean>
<managed-bean-name>bean</managed-bean-name>
<managed-bean-class>com.test.Bean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
Run Code Online (Sandbox Code Playgroud)
这是例外:
com.sun.faces.mgbean.ManagedBeanCreationException:在托管bean mailingCitySuggestions上执行资源注入时发生错误
更新:这是堆栈跟踪:
com.sun.faces.mgbean.ManagedBeanCreationException: An error occurred performing resource injection on managed bean mailingCitySuggestions
[5/31/11 13:37:10:506 CDT] 00000126 SystemErr R at com.sun.faces.mgbean.BeanBuilder.injectResources(BeanBuilder.java:213)
[5/31/11 13:37:10:506 CDT] 00000126 SystemErr R at com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:108)
[5/31/11 13:37:10:506 CDT] 00000126 SystemErr R at com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:374)
[5/31/11 13:37:10:506 CDT] 00000126 SystemErr R at com.sun.faces.mgbean.BeanManager.create(BeanManager.java:222)
[5/31/11 13:37:10:506 CDT] 00000126 SystemErr R at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:88)
[5/31/11 13:37:10:506 CDT] 00000126 SystemErr R at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
[5/31/11 13:37:10:506 CDT] 00000126 SystemErr …Run Code Online (Sandbox Code Playgroud) 使用<resource-bundle>文件我可以在我的JSF页面中使用i18n文本.
但是有可能在我的托管bean中访问这些相同的属性,所以我可以设置具有i18n值的面部消息吗?
如果我有@ManagedBean这个@SessionScoped,为什么我会使用@StatefulEJB?我之前用过购物车并保持会话状态,但由于托管bean将在用户会话期间保存,我可以在那里存储状态,然后调用SLSB以获取业务逻辑.那是对的吗?如果是,那么有状态的ejbs将留给更具体的应用程序,例如何时需要交易等?
好的,所以我有一个JSF支持bean需要引用另一个(@NoneScoped)bean.
我应该@Inject它还是使用@ManagedProperty从容器中获取实例引用?
为什么要使用一个而不是另一个,在我看来,这两种方法实现了同样的目的.
我有一个会话范围的bean:
@Named
@SessionScoped
public class SessionBean implements Serializable {
private String someProperty;
public String getSomeProperty() {
return someProperty;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在请求范围的bean中注入它并使用它初始化:
@Named
@RequestScoped
public class RequestBean {
@Inject
private SessionBean sessionBean;
public RequestBean() {
System.out.println(sessionBean.getProperty());
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它会引发以下异常:
java.lang.NullPointerException
at com.example.RequestBean.<init>(RequestBean.java:42)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at org.jboss.weld.introspector.jlr.WeldConstructorImpl.newInstance(WeldConstructorImpl.java:206)
at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:117)
at org.jboss.weld.bean.ManagedBean.createInstance(ManagedBean.java:336)
at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.produce(ManagedBean.java:200)
at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:292)
...
Run Code Online (Sandbox Code Playgroud)
这是怎么造成的,我该如何解决?
我正在使用JavaServer Faces开发Web应用程序.
我已经找到了很多关于如何使用JavaServer Faces的示例和教程,但它们都没有实际解释Bean的用途.我最初的想法是,豆类代表形式.在表单中输入数据并单击提交按钮,关联的Bean将填充数据并调用方法.
但是,到目前为止,我只看到每页有一个Bean的示例,因此Bean也可以表示页面,因此包含多个表单.
我也对Bean的范围感到困惑.如果Bean表示表单或页面,则在请求结束后它将变为无效.如果你让bean活在会话范围内,那么Bean会发生什么?您是否仍然可以以某种方式从中获取数据,或者一旦您返回它就会为您填写相关表格?
总结一下 - 什么是Managed Bean以及如何正确使用它?
我遇到这种情况:我在尝试从托管bean中添加新的头像之前删除旧的头像图像.
String fileName = "resources/img/useravatars/" + getSessionBean().getSearchAccount().getAvatar();
File f = new File(fileName);
Run Code Online (Sandbox Code Playgroud)
我已经google了一下,似乎我可以从ExternalContext获取该文件夹的路径,如:
FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.getExternalContext(). ...
Run Code Online (Sandbox Code Playgroud)
但我找不到类文档中的适当方法.你能帮忙说些什么而不是...或建议一个更好的解决方案.
PS.不知何故,我怀疑有可能对链接进行硬编码,但到目前为止还没有运气.
managed-bean ×10
jsf ×9
cdi ×2
jsf-2 ×2
architecture ×1
constructor ×1
destroy ×1
ejb ×1
entity ×1
javascript ×1
resources ×1
view-scope ×1