简单的一段代码dataTable.CentralFeed是SessionScoped Bean,PostComment是RequestScoped Bean
<h:form id="table">
<h:dataTable value="#{CentralFeed.profileComments}" var="item">
<h:column>
<h:outputText value="#{item.comment}"/><br/>
<h:inputTextarea value="#{item.newComment}" rows="2"/><br/>
<h:commandButton value="Post" action="#{PostComment.postReply(item)}" />
</h:column>
</h:dataTable>
</h:form>
Run Code Online (Sandbox Code Playgroud)
内 CentralFeed.java
private List<NewsFeed> profileComments = null;
public List<NewsFeed> getProfileComments() {
PhaseId currentPhaseId = FacesContext.getCurrentInstance().getCurrentPhaseId();
profileComments = scholarBean.findProfileCommentsByUserId(getSelectedUser().getId());
//model = new ListDataModel<NewsFeed>(profileComments);
return profileComments;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是getProfileComments()被召唤了很多.currentPhaseId将告诉我们该方法被调用的阶段.当页面首次加载时,在第6阶段 - getProfileComment约5次接听电话RENDER_RESPONSE.页面有一个inputTextarea,所以我输入了一些内容,然后单击Post(commandButton).然后再通过阶段1-> 4 再getProfileComment调用12次.每个阶段调用此方法3-4次.然后,在属性newComment获取调用的setter方法(所以setNewComment()得到调用),getProfileComment再次调用get调用 …
我正在使用Primefaces + JSF开发一个应用程序.我的数据表有效,但排序有问题sortBy=,我试过sortBy="#{pc.rota}"但它也不起作用:
数据表显示所有行,我认为是问题sortBy=或我的支持bean.
page.xhtml
<h:body>
<h:form id="pcEmulation">
<p:dataTable id="dataTablePCEMulation" var="pc" value="#{pCEmulationBean.allPCEmulation}"
rows="10"
rowsPerPageTemplate="5,30,50,100,200,300"
emptyMessage="Não foi encontrado"
>
<f:facet name="header">
PC Emulation Web
</f:facet>
<p:column headerText="PC - TX OLO's" filterValue="#{pc.filtpcn}" filterMatchMode="contains" filterBy="#{pc.filtpcn}" >
<h:outputText value="#{pc.filtpcn}" />
</p:column>
<p:column headerText="Rota" sortBy="rota" >
<h:outputText value="#{pc.rota}" />
</p:column>
<p:column headerText="Origem">
<h:outputText value="#{pc.origem}" />
</p:column>
<p:column headerText="Antigo">
<h:outputText value="#{pc.epcn}" />
</p:column>
<p:column headerText="Destino">
<h:outputText value="#{pc.destino}" />
</p:column>
<p:column headerText="PC-Novo">
<h:outputText value="#{pc.realpcn}" />
</p:column>
</p:dataTable>
<p:blockUI block="dataTablePCEMulation" trigger="dataTablePCEMulation">
LOADING<br …Run Code Online (Sandbox Code Playgroud) 我目前的环境是JRE 1.7,JSF 2.2,Eclipse Luna.在entity_index.xhtml我的应用程序的某个页面()中,我有以下(PrimeFaces)按钮:
<p:commandButton value="Details" action="entity_details"
ajax="false" onclick="this.form.target='_blank'">
<f:param name="id" value="#{entity.id}" />
</p:commandButton>
Run Code Online (Sandbox Code Playgroud)
我们的想法是提供一个按钮,以便用户可以单击它,当前实体的一些细节将显示在另一个浏览器选项卡(页面entity_details.xhtml)中.这是许多的一个按钮,因此entity_index.xhtml页面显示实体的许多实例,每个实例都有一个详细信息按钮.
按钮的工作方式是新选项卡打开并显示正确的页面(entity_details.xhtml),但实体ID永远不会到达处理详细信息页面的bean(EntityDetailsMB).详情页面如下:
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui" xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:dsi="http://www.cce.ufpr.br"
template="/private/template/sbadmin.xhtml">
<f:metadata>
<f:viewParam name="id" value="#{entityDetailsMB.id}"/>
</f:metadata>
<ui:define name="content">
<h2 class="page-header">#{entityDetailsMB.entity.name}</h2>
<h:form id="form">
...
</ui:composition>
Run Code Online (Sandbox Code Playgroud)
请注意,有一个<f:metadata/>元素专门用于捕获从索引页面发送的参数并将其转发到id属性中EntityDetailsMB,其中包含以下内容:
public Entity getEntity() {
return entityById(id);
}
public Long getId() {
return id;
}
public void setId(Long value) {
id = value;
}
Run Code Online (Sandbox Code Playgroud)
因为setId()从不调用该方法,所以 …
我是JSF 2.0和Primefaces的新手,但决定使用它们创建我的应用程序,看看primefaces展示.
我已完成申请,但注意到它非常慢.我已经在各个地方放置了一些system.out.println以查看正在调用的内容,我注意到有时我的控制器中的方法(例如调用我的DAO从数据库中检索值的方法)在一个事件中被调用多达6次!我的页面中有很多数据表,所以有时候每个表中填充的每个列表有多个数据表*6调用,这似乎是导致速度变慢的原因.
我不确定我做错了什么或者我做错了什么但是在我的控制器中我的方法可能看起来像这样,
public List<Addresses> getAddresses() {
List<Addresses> addr = systemDao.getAddresses(userBean.userId);
return addr;
}
Run Code Online (Sandbox Code Playgroud)
在视图中,我将在数据表元素上调用此方法以显示结果.
当我第一次加载它时它只会调用一次,但是当我点击某个按钮打开一个包含完全不相关数据的对话框时,这个getAddresses()可能被调用3-6次而且它与我请求的数据无关在当前的行动中.是否有人熟悉这个以及如何加快我的应用程序?
我真的不理解吸气剂和塞特剂的工作原理,尽管这是一个基本概念。我有以下代码,该属性如何id发送到Managed Bean?用getter方法捕获了吗?
我的面
<p:inputText id="id" value="#{bean.id}">
Run Code Online (Sandbox Code Playgroud)
我的托管豆
private String id;
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Eclipse和Glassfish 3.0.虽然我以前做过类似的事情,但对这项技术来说还是很新 非常简单,确实有一个绑定到支持bean的数据表.添加方法并删除我已经介绍过的方法 - 问题在于我调用的更新方法.我似乎无法看到组件中拾取的更改(HtmlInputText)从不介意将数据传递回表.
我的数据表代码如下(和jsf页面)
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<f:loadBundle basename="resources.application" var="msg"/>
<head>
<title><h:outputText value="#{msg.welcomeTitle}" /></title>
</head>
<body>
<h:form id="mainform">
<h:dataTable var="row" border="0" value="#{beanCategory.collection}" binding="#{beanCategory.datatable}">
<f:facet name="header">
<h:outputText value="Categories"/>
</f:facet>
<h:column>
<f:facet name="header">
<h:outputText value="Description"/>
</f:facet>
<h:inputText id="input1" value="#{row.description}" valueChangeListener="#{row.inputChanged}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Id"/>
</f:facet>
<h:outputText id="id" value="#{row.id}"/>
</h:column>
<h:column>
<h:commandButton value="Delete" type="submit" action="#{beanCategory.remove}">
<f:setPropertyActionListener target="#{beanCategory.selectedcategory}" value="#{row}"/>
</h:commandButton>
<h:commandButton value="Save" action="#{beanCategory.update}"
>
<f:setPropertyActionListener
target="#{beanCategory.selectedcategory}" value="#{row}" />
</h:commandButton>
</h:column>
</h:dataTable>
<h:inputText id="text1"></h:inputText> <h:commandButton action="#{beanCategory.addCategory}" value="Add" type="submit" id="submitbutton"> …Run Code Online (Sandbox Code Playgroud) 我有一个init()函数,它返回填充数据表所需的Domaines列表,这个数据表的每一行都有两个命令链接,一个用于编辑,另一个用于删除,所以当我按下编辑命令链接时,一个对话框窗口显示Domaine有可能编辑的信息(还有另一个用于添加新域的对话框),所以问题是当我按下编辑时,调用init函数8次然后设置添加对话框的属性(即使之间没有关系)再次调用init函数4次后,编辑命令链接和添加对话框窗口.我不明白wh.这里是我的页面代码:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<ui:composition template="gpsiTemplate.xhtml">
<ui:define name="left-menu">
<ui:include src="admin-menuGauche.xhtml" />
</ui:define>
<ui:define name="top">
<ui:include src="menu-top.xhtml" />
</ui:define>
<ui:define name="content-top">
<center>
<f:view>
<h:form id="topacteurs">
<h:panelGrid columns="14" styleClass="adminTopTable" >
<h5 class="calendar">Direction :</h5>
<p:selectOneMenu id="typeacteurs" value="#{domaine.choixDirection}" style="width: 180px">
<f:selectItem itemLabel="Direction..." itemValue="" />
<f:selectItems value="#{direction.initcomb()}" var="ta" itemValue="#{ta.codeDirection}" itemLabel="#{ta.libelleDirection}" />
<p:ajax update=":mainform:domainlist" process="topacteurs" event="change" />
</p:selectOneMenu>
<p:spacer width="20" height="0" />
<p:commandButton title="Ajouter un domaine" …Run Code Online (Sandbox Code Playgroud) 在使用JSF来开发使用NetBeans的Web应用程序时,我曾多次注意到在某些情况下,JSF ManagedBeand中的getter方法(以及可能的setter)也会被执行多次,而它们只打算执行一次.在这种情况下,有时执行某些操作(特别是某些计算)的某些关键条件(如果等)以防止它们被淹没是非常关键的.我一直在努力了解其背后的实际原因,但我不能.
在这里,我演示了一个非常简单的应用程序,其中有一个getter方法
public Collection<entity.Country> getCountries(){};
Run Code Online (Sandbox Code Playgroud)
调用远程EJB并从MySql数据库中的相关表中检索所有国家/地区并在JSF页面上显示.网页的屏幕截图如下所示.
没有必要对屏幕截图,JSF页面代码及其相应的ManagedBean付出太多和特别的关注.

这是JSF页面代码
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Countries</title>
</h:head>
<h:body>
<h:form>
<center><br/><br/><br/>
<h:dataTable id="dataTable" styleClass="table" frame="box" value="#
{country.countries}" var="row" bgcolor="lightyellow" border="7"
cellpadding="7" cellspacing="7" rules="all" width="50%" dir="ltr">
<f:facet id="header" name="header">
<h:outputText value="~:Country:~" styleClass="tableHeader"/>
</f:facet>
<h:column>
<f:facet name="header">Country ID</f:facet>
<h:outputText id="countryID" value="#{row.countryID}"/>
</h:column>
<h:column>
<f:facet name="header">Country Name :</f:facet>
<h:outputText id="countryName" value="#{row.countryName}"/>
</h:column>
</h:dataTable>
</center>
</h:form>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
相应的简单JSF ManagedBean代码就在这里.
package country;
import commonBean.CommomBeanRemote;
import java.util.Collection;
import javax.ejb.EJB; …Run Code Online (Sandbox Code Playgroud) 所以我从BalusC的这篇文章中读到了如何阻止无状态会话bean在被JSF访问时不断地颠簸数据存储(例如DB)(这可能会/将进行多次调用)所以我已经实现了我的代码我想这是符合BalusC所发布的精神(以及我见过的关于这个问题的"最佳实践"的其他论坛帖子).
我的无状态会话bean看起来像这样:
@Stateless
@Named("productsService")
public class ProductService {
private static boolean changed = true;
private List<Product> products;
private long count;
@PersistenceContext(name = "myPU")
private EntityManager em;
@Inject
private Product product;
public ProductService() {
}
private void productRecordsFromDB() {
products = em.createNamedQuery("Product.getAll", Product.class).getResultList();
Object o = em.createNamedQuery("Product.getCount", Product.class).getSingleResult();
count = ((Long) o).longValue();
}
public void addProduct() {
synchronized (ProductService.class) {
changed = true;
em.persist(product);
}
}
public long countProducts() {
return count;
}
public void removeProduct(Product p) …Run Code Online (Sandbox Code Playgroud) jsf ×7
jsf-2 ×5
primefaces ×4
datatable ×3
getter ×3
java ×2
jpa ×2
ejb-3.1 ×1
el ×1
java-ee ×1
navigation ×1
session-bean ×1
setter ×1
sorting ×1
viewparams ×1