- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
Display dynamic image from database or remote source with p:graphicImage and StreamedContent
(4 个回答)
5年前关闭。
我在 Primefaces 组件图形图像中显示图像时遇到问题。
当我的 MB 是 SessionScoped 时,一切正常。但是当它是 ViewScoped 时,图像不会显示。
我可以保留 SessionScoped,但我的页面确实在图像中上传/删除,并且这些图像存储在 PostgreSQL 中(请,我的软件架构迫使我这样做)。问题是当我插入新图像或删除图像时,页面仍然显示最后的值(未刷新的值),直到我关闭浏览器并再次打开。我希望使用 ViewScoped 可以重新加载页面并解决我的问题。
这是页面的快照:
<p:panel id="panelListFotoProduto" header="Fotos do Produto" toggleable="true" collapsed="false" closable="false"
toggleSpeed="500" widgetVar="panelListFotoProduto" visible="true" >
<p:dataTable id="listFotoProduto" paginatorPosition="bottom" value="#{produtoMB.listProdutoFoto}"
lazy="true" var="pf" selectionMode="single" paginator="true" rows="1"
rowKey="#{pf.id}">
<p:column style="width: 100%" >
<h:panelGrid columns="1" cellpadding="4">
<p:graphicImage id="imageProduto" value="#{produtoMB.getFoto(pf)}" onclick="dialogFotoProduto.show()"/>
<p:commandButton value="Excluir" style="width: 100%;" update=":growl :formProduto:panelListFotoProduto" actionListener="#{produtoMB.removeFoto(pf)}"/>
</h:panelGrid>
</p:column>
<f:facet name="footer">
<h:panelGrid columns="1" cellpadding="4">
<p:commandButton value="Adicionar" style="width: 100%;" update=":growl :formProduto:panelListFotoProduto" actionListener="#{produtoMB.adicionarFoto()}"/>
<h:outputText id="totalProdutos" style="font-weight:bold" value="Total de Fotos Cadastrados: #{produtoMB.listProdutoFoto.size() }"/>
</h:panelGrid>
</f:facet>
</p:dataTable>
</p:panel>
@ManagedBean
@SessionScoped
public class ProdutoMB {
private Produto produto_atual = new Produto();
private Produto_Foto produto_foto_atual = new Produto_Foto();
private List<Produto> listProduto = null;
private List<Produto_Foto> listProdutoFoto = null;
private List<Produto_Foto> listProdutoFoto_all = null;
private boolean adicionarFoto = false;
private StreamedContent last;
public Produto getProduto_atual(){
return produto_atual;
}
public void setProduto_atual(Produto produto) throws SQLException, IOException{
if(produto != null && produto_atual != null
&& produto.getCd_produto().equals(produto_atual.getCd_produto())){
return ;
}
produto_atual = produto;
produto_foto_atual = null;
listProdutoFoto = new ArrayList<>();
int index = 0;
System.out.println("List >> " + getListProdutoFoto_all());
for(Produto_Foto p_f : getListProdutoFoto_all()){
if(produto_atual.getCd_produto().equals(p_f.getCd_produto())){
p_f.setId(index++);
p_f.setContent(getFoto_b(produto_atual.getCd_empresa(), p_f.getCd_imagem()));
listProdutoFoto.add(p_f);
}
}
if(listProdutoFoto.isEmpty()){
Produto_Foto p_f = new Produto_Foto();
p_f.setId(-1);
p_f.setCd_produto(produto_atual.getCd_produto());
p_f.setCd_empresa(produto_atual.getCd_empresa());
p_f.setCd_imagem(-1);
p_f.setContent(getFoto_b(produto_atual.getCd_empresa(), p_f.getCd_imagem()));
listProdutoFoto.add(p_f);
}
}
public void setProduto_foto_atual(Produto_Foto produto_foto) {
if(produto_foto != null && produto_foto_atual != null
&& produto_foto.getCd_produto().equals(produto_foto_atual.getCd_produto())){
return ;
}
produto_foto_atual = produto_foto;
}
public ProdutoMB(){
}
public void handleFileUpload(FileUploadEvent event) throws SQLException, IOException{
if(event != null){
UploadedFile imagem_upload = event.getFile();
byte[] buf = imagem_upload.getContents();
BufferedImage image = ImageIO.read(ImageIO.createImageInputStream(new ByteArrayInputStream(buf)));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( image, "jpg", baos );
baos.flush();
buf = baos.toByteArray();
baos.close();
BufferedImage scaledImage = Scalr.resize(image, 250);
if(scaledImage != null){
baos = new ByteArrayOutputStream();
ImageIO.write( scaledImage, "jpg", baos );
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
buf = imageInByte;
}
if(adicionarFoto){
adicionarFoto = false;
Produto_Foto p_f = new Produto_Foto();
p_f.setId(listProdutoFoto.size());
p_f.setCd_produto(produto_atual.getCd_produto());
p_f.setCd_empresa(produto_atual.getCd_empresa());
p_f.setCd_imagem(-1);
p_f.setContent(buf);
if(listProdutoFoto.size() == 1){
Produto_Foto p_f_aux = listProdutoFoto.get(0);
if(p_f_aux.getId() == -1){
p_f.setId(0);
listProdutoFoto.set(0, p_f);
} else {
listProdutoFoto.add(p_f);
}
} else {
listProdutoFoto.add(p_f);
}
return;
}
if(produto_foto_atual != null){
int index = produto_foto_atual.getId();
if(index >= 0){
produto_foto_atual.setContent(buf);
listProdutoFoto.set(index, produto_foto_atual);
} else if(index == -1){
produto_foto_atual.setContent(buf);
produto_foto_atual.setId(++index);
listProdutoFoto.set(index, produto_foto_atual);
}
}
}
}
public void adicionarFoto(){
adicionarFoto = true;
RequestContext.getCurrentInstance().execute("dialogFotoProduto.show()");
}
public void removeFoto(Produto_Foto produto_foto) throws SQLException, IOException{
if(produto_foto == null){
return ;
}
int index = produto_foto.getId();
if(index >= 0){
listProdutoFoto.remove(index);
for(int i = 0; i < listProdutoFoto.size(); i++){
Produto_Foto p_f = listProdutoFoto.get(i);
if(p_f.getId() > index){
p_f.setId(p_f.getId() - 1);
}
}
}
if(listProdutoFoto.isEmpty()){
Produto_Foto p_f = new Produto_Foto();
p_f.setId(-1);
p_f.setCd_produto(produto_atual.getCd_produto());
p_f.setCd_empresa(produto_atual.getCd_empresa());
p_f.setCd_imagem(-1);
p_f.setContent(getFoto_b(produto_atual.getCd_empresa(), p_f.getCd_imagem()));
listProdutoFoto.add(p_f);
}
}
public void removeFotoAtual(){
if(produto_foto_atual == null){
return ;
}
int index = produto_foto_atual.getId();
if(index >= 0){
listProdutoFoto.remove(index);
for(int i = 0; i < listProdutoFoto.size(); i++){
Produto_Foto p_f = listProdutoFoto.get(i);
if(p_f.getId() > index){
p_f.setId(p_f.getId() + 1);
}
}
}
}
public void removeFotoBanco(Produto_Foto pf_aux) throws SQLException{
if(produto_atual == null){
return ;
}
if(pf_aux == null){
return ;
}
Integer cd_empresa = produto_atual.getCd_empresa();
if(cd_empresa == null){
return ;
}
Connection conn = null;
Connection conn_p = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = conectorImagemPostgreSQL.getConnection();
conn_p = conectorPostgreSQL.getConnection();
conn.setAutoCommit(false);
ps = conn_p.prepareStatement(" DELETE FROM produto_foto WHERE cd_empresa = ? AND cd_produto = ? AND nm_foto = ? AND cd_imagem = ?;");
ps.setInt(1, cd_empresa);
ps.setString(2, produto_atual.getCd_produto());
ps.setString(3, pf_aux.getNm_foto());
ps.setInt(4, pf_aux.getCd_imagem());
ps.executeUpdate();
ps.close();
} catch(Exception e){
e.printStackTrace();
} finally{
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
conn.commit();
}
}
public void salvaFotoBanco() throws SQLException{
if(produto_atual == null){
return ;
}
if(listProdutoFoto == null || listProdutoFoto.isEmpty()){
return ;
}
Integer cd_empresa = produto_atual.getCd_empresa();
if(cd_empresa == null){
return ;
}
Connection conn = null;
Connection conn_p = null;
PreparedStatement ps = null;
ResultSet rs = null;
conn = conectorImagemPostgreSQL.getConnection();
conn_p = conectorPostgreSQL.getConnection();
ps = conn_p.prepareStatement(" DELETE FROM produto_foto WHERE cd_empresa = ? AND cd_produto = ?;");
ps.setInt(1, cd_empresa);
ps.setString(2, produto_atual.getCd_produto());
ps.executeUpdate();
ps.close();
conn_p.commit();
for(Produto_Foto p_f : listProdutoFoto){
try {
conn.setAutoCommit(false);
if(p_f.getId() >= 0 && p_f.getCd_imagem() < 0){
ps = conn.prepareStatement("SELECT f_sequencial('IMAGEMLO', ?) as cd_imagem");
ps.setInt(1, cd_empresa);
rs = ps.executeQuery();
if (rs != null) {
while(rs.next()) {
p_f.setCd_empresa(produto_atual.getCd_empresa());
p_f.setCd_produto(produto_atual.getCd_produto());
p_f.setCd_imagem(rs.getInt(1));
}
}
byte[] b = p_f.getContentBytes();
BufferedImage image = ImageIO.read(ImageIO.createImageInputStream(new ByteArrayInputStream(b)));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( image, "jpg", baos );
baos.flush();
b = baos.toByteArray();
baos.close();
BufferedImage scaledImage = Scalr.resize(image, 250);
if(scaledImage != null){
baos = new ByteArrayOutputStream();
ImageIO.write( scaledImage, "jpg", baos );
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
b = imageInByte;
}
LargeObjectManager lobj = ((org.postgresql.PGConnection)conn).getLargeObjectAPI();
int oid = lobj.create(LargeObjectManager.READ | LargeObjectManager.WRITE);
LargeObject obj = lobj.open(oid, LargeObjectManager.WRITE);
obj.write(b);
obj.close();
ps = conn.prepareStatement(" INSERT INTO imagemlo(cd_empresa, cd_imagem, ds_imagem, by_imagem) "
+ "VALUES (?, ?, ?, ?);");
String file_name = p_f.getCd_empresa() + "_" +
p_f.getCd_produto() + "_" +
p_f.getCd_imagem() + ".jpg";
ps.setInt(1, cd_empresa);
ps.setInt(2, p_f.getCd_imagem());
ps.setString(3, file_name);
ps.setLong(4, oid);
ps.executeUpdate();
ps.close();
}
ps = conn_p.prepareStatement(" INSERT INTO produto_foto(cd_empresa, cd_produto, nm_foto, cd_imagem) "
+ "VALUES (?, ?, ?, ?);");
String file_name = p_f.getCd_empresa() + "_" +
p_f.getCd_produto() + "_" +
p_f.getCd_imagem() + ".jpg";
ps.setInt(1, cd_empresa);
ps.setString(2, produto_atual.getCd_produto());
ps.setString(3, file_name);
ps.setInt(4, p_f.getCd_imagem());
ps.executeUpdate();
ps.close();
} catch(Exception e){
e.printStackTrace();
} finally{
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
conn.commit();
}
}
FacesMessage msg = new FacesMessage("Alterações salvas com sucesso.", "");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
public void editaFoto(Produto_Foto produto_foto){
if(produto_foto != null){
produto_foto_atual = produto_foto;
}
}
public StreamedContent getFotoAtual() throws SQLException, IOException{
if(produto_foto_atual != null){
int index = produto_foto_atual.getId();
if(index >= 0){
last = listProdutoFoto.get(index).getContent();
}
}
return last;
}
public StreamedContent getFoto(Produto_Foto produto_foto) throws SQLException, IOException{
if(produto_foto != null){
produto_foto_atual = produto_foto;
int index = produto_foto.getId();
if(index >= 0){
last = listProdutoFoto.get(index).getContent();
}
if(index == -1){
last = listProdutoFoto.get(0).getContent();
}
}
if(last == null){
last = (new DefaultStreamedContent(new ByteArrayInputStream(getFoto_b(produto_atual.getCd_empresa(), -1)), "image/jpeg", "img_padrao"));
}
return last;
}
public StreamedContent getFoto(Integer cd_empresa, Integer cd_imagem) throws SQLException, IOException{
Usuario u = (Usuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("LoggedUser");
if(u == null){
System.out.println("Usuário é nulo");
FileInputStream fis = new FileInputStream(FacesContext.getCurrentInstance().getExternalContext().getRealPath("image_not_found.png"));
return (new DefaultStreamedContent(fis, "image/jpeg", "img_padrao"));
}
if(produto_atual == null){
System.out.println("Produto Atual é nulo");
FileInputStream fis = new FileInputStream(FacesContext.getCurrentInstance().getExternalContext().getRealPath("image_not_found.png"));
return (new DefaultStreamedContent(fis, "image/jpeg", "img_padrao"));
}
if(cd_empresa == null){
System.out.println("cd_empresa é nulo");
FileInputStream fis = new FileInputStream(FacesContext.getCurrentInstance().getExternalContext().getRealPath("image_not_found.png"));
return (new DefaultStreamedContent(fis, "image/jpeg", "img_padrao"));
}
if(cd_imagem == null || cd_imagem < 0){
System.out.println("cd_imagem é nulo ou menor que zero");
FileInputStream fis = new FileInputStream(FacesContext.getCurrentInstance().getExternalContext().getRealPath("image_not_found.png"));
return (new DefaultStreamedContent(fis, "image/jpeg", "img_padrao"));
}
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = conectorImagemPostgreSQL.getConnection();
conn.setAutoCommit(false);
LargeObjectManager lobj = ((org.postgresql.PGConnection)conn).getLargeObjectAPI();
ps = conn.prepareStatement("SELECT ds_imagem, by_imagem FROM imagemlo WHERE cd_empresa = ? AND cd_imagem = ?");
ps.setInt(1, cd_empresa);
ps.setInt(2, cd_imagem);
rs = ps.executeQuery();
if (rs != null) {
while(rs.next()) {
String ds_imagem = rs.getString("ds_imagem");
int oid = rs.getInt("by_imagem");
LargeObject obj = lobj.open(oid, LargeObjectManager.READ);
//read the data
byte buf[] = new byte[obj.size()];
obj.read(buf, 0, obj.size());
obj.close();
BufferedImage image = ImageIO.read(ImageIO.createImageInputStream(new ByteArrayInputStream(buf)));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( image, "jpg", baos );
baos.flush();
buf = baos.toByteArray();
baos.close();
BufferedImage scaledImage = Scalr.resize(image, 250);
if(scaledImage != null){
baos = new ByteArrayOutputStream();
ImageIO.write( scaledImage, "jpg", baos );
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
buf = imageInByte;
}
return (new DefaultStreamedContent(new ByteArrayInputStream(buf), "image/jpeg", ds_imagem));
}
}
FileInputStream fis = new FileInputStream(FacesContext.getCurrentInstance().getExternalContext().getRealPath("image_not_found.png"));
return (new DefaultStreamedContent(fis, "image/jpeg", "img_padrao"));
} finally{
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
conn.commit();
}
}
public byte[] getFoto_b(Integer cd_empresa, Integer cd_imagem) throws SQLException, IOException{
Usuario u = (Usuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("LoggedUser");
if(u == null){
FileInputStream fis = new FileInputStream(FacesContext.getCurrentInstance().getExternalContext().getRealPath("image_not_found.png"));
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
while (fis.read(buffer) != -1) out.write(buffer);
return out.toByteArray();
}
if(produto_atual == null){
FileInputStream fis = new FileInputStream(FacesContext.getCurrentInstance().getExternalContext().getRealPath("image_not_found.png"));
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
while (fis.read(buffer) != -1) out.write(buffer);
return out.toByteArray();
}
if(cd_empresa == null){
FileInputStream fis = new FileInputStream(FacesContext.getCurrentInstance().getExternalContext().getRealPath("image_not_found.png"));
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
while (fis.read(buffer) != -1) out.write(buffer);
return out.toByteArray();
}
if(cd_imagem == null || cd_imagem < 0){
FileInputStream fis = new FileInputStream(FacesContext.getCurrentInstance().getExternalContext().getRealPath("image_not_found.png"));
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
while (fis.read(buffer) != -1) out.write(buffer);
return out.toByteArray();
}
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = conectorImagemPostgreSQL.getConnection();
conn.setAutoCommit(false);
LargeObjectManager lobj = ((org.postgresql.PGConnection)conn).getLargeObjectAPI();
ps = conn.prepareStatement("SELECT ds_imagem, by_imagem FROM imagemlo WHERE cd_empresa = ? AND cd_imagem = ?");
ps.setInt(1, cd_empresa);
ps.setInt(2, cd_imagem);
rs = ps.executeQuery();
if (rs != null) {
while(rs.next()) {
String ds_imagem = rs.getString("ds_imagem");
int oid = rs.getInt("by_imagem");
LargeObject obj = lobj.open(oid, LargeObjectManager.READ);
//read the data
byte buf[] = new byte[obj.size()];
obj.read(buf, 0, obj.size());
obj.close();
BufferedImage image = ImageIO.read(ImageIO.createImageInputStream(new ByteArrayInputStream(buf)));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write( image, "jpg", baos );
baos.flush();
buf = baos.toByteArray();
baos.close();
BufferedImage scaledImage = Scalr.resize(image, 250);
if(scaledImage != null){
baos = new ByteArrayOutputStream();
ImageIO.write( scaledImage, "jpg", baos );
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
buf = imageInByte;
}
return buf;
}
}
FileInputStream fis = new FileInputStream(FacesContext.getCurrentInstance().getExternalContext().getRealPath("image_not_found.png"));
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
while (fis.read(buffer) != -1) out.write(buffer);
return out.toByteArray();
} finally{
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
conn.commit();
}
}
public void save() throws SQLException{
salvaFotoBanco();
}
public List<Produto> getListProduto() {
Usuario u = (Usuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("LoggedUser");
if(u == null){
return null;
}
Integer cd_empresa = u.getCd_empresa();
if(cd_empresa == null){
return null;
}
if(listProduto == null){
listProduto = getProduto(cd_empresa);
}
return listProduto;
}
public List<Produto_Foto> getListProdutoFoto_all() {
if(listProdutoFoto_all == null){
listProdutoFoto_all = getProduto_Foto(produto_atual.getCd_empresa());
}
return listProdutoFoto_all;
}
/**
* Methods to get/set data in the DB...
*/
}
最佳答案
了解 <p:graphicImage>
和 StreamedContent
的工作原理很重要。 <p:graphicImage value>
后面的属性将基本上在两个完全独立的 HTTP 请求中查询每个图像。
第一个 HTTP 请求(执行所有 JSF 工作并因此负责生成包含 <img>
标记的一堆 HTML 代码的请求)基本上会查询属性以确定它返回的图像类型(例如 String
或 StreamedContent
) 以便可以内联/自动生成正确的 URL。请注意,在 StreamedContent
的情况下,图像的内容是 而不是 被读取。 HTML 图像并不是这样工作的:不是网络服务器将它们内联到同一个 HTTP 请求中,而是网络浏览器在另一个 HTTP 请求中单独下载它。
当使用 StreamedContent
时,第二个 HTTP 请求(当浏览器需要根据 <img>
元素的 URL 下载具体图像文件以便在 HTML 文档中的所需位置显示它时触发的请求)将基本上要再次咨询属性(property),才能下载图片内容。
View 范围的 bean 通过隐藏的输入字段 javax.faces.ViewState
绑定(bind)到特定的 JSF View 。如果这在 HTTP 请求中不存在(或具有不同的值),那么基本上意味着完全不同的 View 。因此,这些图像请求不会重用相同的 View 范围 bean 实例。每个图像请求都会获得一个全新的 View 范围 bean 实例,所有属性都设置为默认值。 session 范围的 bean 基本上与当前在客户端和服务器之间建立的 HTTP session 一样长,因此相同的 bean 实例将被重用于这些图像请求,所以它就是这样工作的。
要解决您的具体问题,最好是创建一个应用程序或请求范围 bean,它通过其 ID 作为请求参数获取图像。这样,您也不需要一次用数十或数百张图像污染 session (这只会在多个并发用户查看相同图像的情况下浪费服务器内存)。您只需要拥有数据表的图像标识符列表,并通过单独的应用程序范围 bean 提供图像。
也可以看看:
关于jsf-2 - Primefaces中ManagedBean返回null给graphicImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13651248/
我想为每个条显示不同颜色的 primefaces 条形图。我得到的最接近的就像图像: 我想用不同的颜色来表示这些条,比如绿色代表“准时”,黄色代表“警告”,红色代表“逾期” 我尝试使用 model.s
我对 Primefaces 3 对话框的构造感到困惑。 我在 SO 中看到了具有这种模式的问题。表单在对话框之外。 但另一个问题有这个。 Primef
我尝试使用一个简单的gmap示例开始开发Web应用程序,但是它对我不起作用。 我使用了在网页上找到的示例电影收藏家。我只在template.html文件中包含了这个代码。 我收到此错误: javax.
我正在使用 primefaces 3.0。我有三个文本字段,其中任何一个都是必需的。我如何在 primefaces 中验证这一点。请帮忙..谢谢 最佳答案 通常,当在组件上使用自定义 f:valida
我正在尝试为 primefaces 选择列表创建自定义过滤器。当我按照手册中的说明进行操作时,我在 primefaces 的某处遇到了 TypeError。 我对picklist的定义 我的过滤
我正在努力处理primefaces日历。我需要的是,如果今天是 2011 年 7 月 28 日,我可以限制用户选择 7 月 28 日之前 1 年和 7 月 28 日之后 3 年的日期。 我查看了 pr
有没有办法删除 p:datatable 标题上的全选复选框。 我需要单个行上的复选框,而不是标题上的复选框。 最佳答案 这非常有效: .ui-chkbox.ui-chkbox-all.ui-widge
Primefaces 3.5,Mojarra 2.1.14。这是我的 PF 数据表,它包含一个名为“自动”的不可编辑 bool 列和可编辑的“标签”列:
我想在向导的最后一个选项卡上隐藏后退按钮。 我正在使用素面。它的解决方案是什么? 谢谢 最佳答案 您可以使用 jQuery 在客户端执行此操作: 假设您正在使用展示中的向导:http://www.pr
如果我在 PrimeFaces 数据表中设置属性“scrollable=true”,它可以垂直滚动。但是可以水平滚动这个表格吗? 最佳答案 Primefaces 支持在数据表上水平滚动。只需像这样指定
我有这个代码。在用户选择一行并关闭对话框之后,它将触发rowSelect事件。在我更新为primfaces 3.3(我安装了ver3.2)之前,它工作得很好。我在控制台中没有任何异常,当我调试时,我看
是否存在任何方法来设置 primefaces 的日历组件的年份列表? 最佳答案 对于年份列表,您可以使用 navigator="true" p:calendar 中素面的属性标记和年份范围 c-100
我正在使用 primefaces 3.2。我已经准备好了向导,可以在数据表的同一页面上插入用户信息。向导逐个选项卡获取信息并在确认选项卡上提交。它还将反射(reflect)在数据表的同一页面上。它运行
我有一个 p:treeTable,树内容都在一列中。该树是一个共享组件,因此我的某些页面需要列标题,而有些则不需要。在列标题为空的页面中,它为列标题创建一个空行,这是我不想要的。我确实想要列内容,只是
我使用的是primefaces 3.4,我在 p:overlaypanel 中有一个 p:calendar 。当我选择日期时,覆盖面板关闭(使用 Google Chrome 时)当我使用 Firefo
当我使用日历时,我将“timeOnly”设置为“true”,将“pattern”设置为“HH:mm a”。 当输入时间大于或等于“13:00 pm”时,日历每次获得焦点,都会 自动将时间更改为“23:
我也在尝试获取枚举“CityCodes.java”中定义的城市代码,这是我的枚举类,我的定义如下: public enum Cities { AL("Alabama","1"), AK("Alaska
在 PrimeFaces 展示页面上有一个简单的标题栏,适合实际主题。我的意思是此页面上的“欢迎来到 PrimeFaces 展示”文本:http://www.primefaces.org/showca
是否可以在 Primefaces 中创建垂直菜单栏? 我习惯了像 Ext-JS 这样简单的纯 AJax 框架,但到目前为止我还没有在 PF 中看到这样的组件。 谢谢, 乔 最佳答案 它被称为分层菜单。
是否可以设置 Primefaces 的 ScrollPanel 的滚动速度? Scrollpanel 在“ native ”模式下的滚动速度可以,但在“默认”模式下不行。 我使用的是 Primefac
我是一名优秀的程序员,十分优秀!