如何获得ArrayList使用JSF EL表达式的长度?
#{MyBean.somelist.length}
Run Code Online (Sandbox Code Playgroud)
不起作用.
我希望在这篇文章中,我可以得到人们对JSF页面和支持bean之间接口的最佳实践的看法.
我永远无法解决的一件事是我的支持豆的结构.此外,我从未找到关于这个主题的好文章.
什么属性属于哪个支持bean?何时适合向给定bean添加更多属性,而不是创建新bean并将属性添加到其中?对于简单的应用程序,考虑到将一个bean注入另一个bean所涉及的复杂性,为整个页面只有一个支持bean是否有意义?支持bean是否应该包含任何实际的业务逻辑,还是应该严格包含数据?
随意回答这些问题以及可能出现的任何其他问题.
至于减少JSF页面和支持bean之间的耦合,我从不允许JSF页面访问任何支持bean属性的属性.例如,我从不允许以下内容:
<h:outputText value="#{myBean.anObject.anObjectProperty}" />
Run Code Online (Sandbox Code Playgroud)
我总是需要这样的东西:
<h:outputText value="#{myBean.theObjectProperty}" />
Run Code Online (Sandbox Code Playgroud)
支持bean值为:
public String getTheObjectProperty()
{
return anObject.getAnObjectProperty();
}
Run Code Online (Sandbox Code Playgroud)
当我循环遍历集合时,我使用包装类来避免向下钻取到数据表中的对象.
一般来说,这种方法对我来说是"正确的".它避免了视图和数据之间的任何耦合.如果我错了,请纠正我.
我正在阅读JSF,它是一个UI框架并提供了一些UI组件.但它与jQueryUI,AngularJS,ExtJS甚至纯HTML,CSS和JavaScript中可用的组件数量有何不同或更好.
为什么有人要学习JSF?
对于Java Server Faces与所谓的facelets之间的具体区别,我似乎无法得到明确的答案.任何人都可以给我一个明确的答案吗?!?
此外,我知道JSF或JSP可用于创建动态网页,但两个看似相互冲突的细节让我感到困惑.我听说过以下两种情况:
JSF是JSP的替代品; 和
JSF和JSP构成了Java的Web层MVC范例中View的不同部分
那是哪个呢?逻辑决定它几乎肯定不能两者兼得!
我刚开始阅读Core JavaServer Faces,第3版.他们这样说(强调我的):
对于可以在JSF页面中使用的bean,有两种不同的机制,CDI bean和JSF托管bean,这是一个历史事故.我们建议您使用CDI bean,除非您的应用程序必须在像Tomcat这样的普通servlet运行器上运行.
为什么?他们没有提供任何理由.我一直在使用@ManagedBean在GlassFish 3上运行的原型应用程序中的所有bean,我还没有发现任何问题.我不介意迁移@ManagedBean到@Named,但我想知道为什么我应该打扰.
直到在什么时间点不JSF UI保存组件的状态在服务器端和什么时候被删除的UI组件的状态信息从服务器内存?当应用程序中的登录用户浏览页面时,组件的状态是否会继续在服务器上累积?
我不明白在服务器上保持UI组件状态有什么好处?是不是直接将经过验证/转换的数据传递给托管bean?我可以或者应该尽量避免它吗?
如果有数千个并发用户会话,那么在服务器端是否会消耗太多内存?我有一个应用程序,用户可以在某些主题上发布博客.这个博客的规模非常大.当有回复或请求查看博客时,这些大页面数据是否会被保存为组件状态的一部分? 这会耗费太多记忆.这不是一个问题吗?
现在,在使用JSF时不再需要保存状态.可以使用高性能无状态JSF实现.有关详细信息和讨论,请参阅此博客和此问题.此外,JSF规范中还包含一个未解决的问题,即为JSF提供无状态模式的选项.(PS考虑的问题投票这个和这个,如果这对你是一个非常有用的功能.)
一个好消息,Mojarra 2.1.19是无状态模式!
看这里:
http://weblogs.java.net/blog/mriem/archive/2013/02/08/jsf-going-stateless?force=255
我想制作一个selectOneMenu下拉列表,以便我可以在我的问题上选择一个状态.是否可以使f:selectItem更灵活,考虑到如果枚举的顺序发生变化会发生什么,以及列表是否很大?我能做得更好吗?是否可以自动"选择"问题所具有的项目?
恩类
public enum Status {
SUBMITTED,
REJECTED,
APPROVED
}
Run Code Online (Sandbox Code Playgroud)
问题实体
@Enumerated(EnumType.STRING)
private Status status;
Run Code Online (Sandbox Code Playgroud)
JSF
<div class="field">
<h:outputLabel for="questionStatus" value="Status" />
<h:selectOneMenu id="questionStatus" value="#{bean.question.status}" >
<f:selectItem itemLabel="Submitted" itemValue="0" />
<f:selectItem itemLabel="Rejected" itemValue="1" />
<f:selectItem itemLabel="Approved" itemValue="2" />
</h:selectOneMenu>
<hr />
</div>
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个自定义servlet(用于AJAX/JSON),我想在其中引用我@ManagedBeans的名字.我希望能够映射:
http://host/app/myBean/myProperty
至:
@ManagedBean(name="myBean")
public class MyBean {
public String getMyProperty();
}
Run Code Online (Sandbox Code Playgroud)
是否可以从常规servlet中按名称加载bean?是否有我可以使用的JSF servlet或帮助程序?
我似乎被春天宠坏了,这一切都太明显了.
我正在尝试使用PrimeFaces上传文件,但fileUploadListener上传完成后不会调用该方法.
这是观点:
<h:form>
<p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}"
mode="advanced"
update="messages"
sizeLimit="100000"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/>
<p:growl id="messages" showDetail="true"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
还有豆子:
@ManagedBean
@RequestScoped
public class FileUploadController {
public void handleFileUpload(FileUploadEvent event) {
FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在方法上放置了一个断点,但它从未调用过.当使用mode="simple"和时ajax="false",它已被调用,但我希望它在高级模式下工作.我正在使用Netbeans和Glassfish 3.1.
我在JSF 2应用程序中使用Primefaces.我有一个<p:dataTable>,而不是选择行,我希望用户能够直接对各行执行各种操作.为此,我<p:commandLink>在最后一栏中有几个.
我的问题:如何将行ID传递给命令链接启动的操作,以便我知道要对哪一行进行操作?我尝试使用<f:attribute>:
<p:dataTable value="#{bean.items}" var="item">
...
<p:column>
<p:commandLink actionListener="#{bean.insert}" value="insert">
<f:attribute name="id" value="#{item.id}" />
</p:commandLink>
</p:column>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
但它总是产生0 - 显然在f呈现属性时行变量不可用(当我使用固定值时它可以工作).
有人有替代解决方案吗?
jsf ×10
jsf-2 ×5
java ×4
java-ee ×3
jsp ×2
cdi ×1
commandlink ×1
datatable ×1
el ×1
enums ×1
file-upload ×1
jstl ×1
managed-bean ×1
primefaces ×1
servlets ×1
state-saving ×1