I would like to know if there is a method to label and rename the text displayed by JSF Choose a File when I'm using the tag <h:InputFile> in JSF.
That's not possible with native HTML. The appearance and the button's label is browser-dependent. The particular "Choose File" label is recognizable as the one from Chrome with English language pack (e.g. FireFox uses "Browse..."). As JSF is in the context of this question just a HTML code generator, it can't do much for you either.
There are several ways to achieve this. All can be found in this HTML+CSS targeted Q&A: Styling an input type="file" button, particularly this answer.
Easiest way is to reference it via <h:outputLabel for>, style it to look like a button and hide the actual file upload component. Clicking the label element will as usual just delegate the click event to the associated input element. See also Purpose of the h:outputLabel and its "for" attribute.
Here's a non-IE compatible kickoff example (it's supported in IE's successor Edge):
<h:outputLabel for="file" value="Pick a file" styleClass="upload" />
<h:inputFile id="file" value="#{bean.file}" styleClass="upload" />
label.upload {
-webkit-appearance: button;
-moz-appearance: button;
appearance: button;
padding: 2px;
cursor: pointer;
}
input.upload {
display: none;
}
If you'd like to support IE9+ too, replace appearance: button by a background and border. It's only harder to get it to look like a true button. The below is far from ideal, but should at least get you started.
label.upload {
padding: 2px;
border: 1px solid gray;
border-radius: 2px;
background: lightgray;
cursor: pointer;
}
If you'd like to support IE6-8 too, which won't delegate the label's click event to the hidden input element, then well, head to the aforementioned related question for CSS tricks on that and rewrite JSF code in such way that it generates exactly the desired HTML+CSS(+JS) output.
A completely different alternative is to grab an UI oriented JSF component library, such as PrimeFaces which is based on jQuery UI. See also its <p:fileUpload> showcase.
Related
I am using PrimeFaces 7.0 on WildFly 16, JSF 2.3. (I also tried with PrimeFaces 6.2- but nothing changed).
I am using p:galleria tag as follows:
<p:galleria value="#{exposeBean.images}" var="image" panelWidth="500" panelHeight="313" showCaption="false">
<p:graphicImage id="image" value="#{image}" alt="#{image}" title="#{image}"/>
</p:galleria>
The above functionality works as expected, however the picture currenlty chosen does not fade at the bottom, where the rest of the images of the gallery are shown- see here:
What can be the reason, how can I solve it?
My minimal, working example seems to have something to do with the size of the images I use (at least, it seems to be like this.) :
https://github.com/alexmivonwien/pf.gall.git
After comparing the generated HTML and CSS in my case and in the case of the primeface galleria showcase I found the following difference:
1.) My own generated HTML and CSS:
note that the first "li" child under the "ul" element
<ul class="ui-galleria-panel-wrapper" style="width: 500px; height: 313px;">
has the CSS style (there is no display:none here):
<li class="ui-galleria-panel" style="width: 500px; height: 313px;">
2.) The HTML and CSS on the primefaces showcase:
Note that the first "li" element under the "ul" element
<ul class="ui-galleria-panel-wrapper" style="width: 500px; height: 313px;">
has the css style (there is a display:none here):
<li class="ui-galleria-panel" style="width: 500px; height: 313px; display: none;">
The only way this can be reproduced in the PrimeFaces showcase is by assigning an explicit height to the images. E.g. adding a css rule via a browser developer tool like img {height: 364px} makes this happen. This makes the big image btw not fully show what is in the thumbnail, it is cut-off at the right. And this can be seen in your screen dump as well. In the thumbnail there is way more visible of the sink on the right than in the big image. So this is with 100% certainty caused by some css that resizes the image or with a wrong aspect of the image compared to ttge dimensions put om the p:galeria
The actual technical cause of this is however not visible in the code in your question. Next time, always create a [mcve], by reducing more and more and more until you are either left with a very small piece of (complete, verifyable, executable) code that demonstrates the problem, OR you found the solution...
Effectively this problem is all plain css html related and nothing PrimeFaces specific.
This is data from jsf-ibm.jar (MANIFEST.MF file), in order to provide info
about the version of jsf which is being used by the application I am currently working on:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: IBM Corporation
Specification-Title: Java Server Faces
Implementation-Title: JSF Widget Library (JWL) - Base
Implementation-Version: JWL v3_1_13
Implementation-Vendor: IBM
Build-Version: 20120307.2306
Build-Date: March 7 2012
Copyright-Info: Copyright (c) 2003,2008, International Business Machin
es Corporation. All Rights Reserved.
I am stuck with chasing and resolving this strange apps behaviour whihch happens only in IE.
There is link and when it is clicked the dialog box should open (form with some data that can be edited and saved, etc.). But when the link is clicked, then the dialog opens, but all over the app is something which I call "white cloud". The entire app and the dialog is blured and nothing can be clicked. Then, I click browsers (IE) refresh button, which closes dialog and returns the page with list of data where the link is.
I have tried to use IE developer tools and find out that when the element with id HX_DLG_SCRATCH_0 is removed then this white cloud disappears, dialog can be e.g. closed, but the background of the app remains ("normal behaviour" in e.g. Firefox would be non blocked dialog, but the background of the app is gray, there are no app elements which are behind the dialog). This element is generated by ibm-jsf.
This is the element from IE DOM explorer:
<BODY bodyUnloadEventNum="1" marginwidth="0" marginheight="0" hasbox="2" boxItem=" [object]"><DIV id=HX_DLG_SCRATCH_0 style="FONT-SIZE: 1px; BORDER-TOP: 0px; HEIGHT: 1166px; BORDER-RIGHT: 0px; WIDTH: 1676px; BORDER-BOTTOM: 0px; POSITION: absolute; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; PADDING-LEFT: 0px; LEFT: 0px; FILTER: progid:DXImageTransform.Microsoft.Alpha(enabled=false); MARGIN: 0px; BORDER-LEFT: 0px; Z-INDEX: 10001; TOP: 0px; PADDING-RIGHT: 0px; BACKGROUND-COLOR: #e2e2e2" name="HX_DLG_SCRATCH_0" hasbox="2" boxItem="[object]"></DIV></BODY>
</html>
This is a part of jsp code of the page where the link is:
<h:outputLink id="link1" rendered="#{not empty book.bookType}">
<h:outputText id="text1" value="#{msg[book.bookType.tag]}"
styleClass="outputText">
</h:outputText>
<hx:behavior event="onclick" behaviorAction="get;show;stop" id="behaviour1"
targetAction="subview1:panelForm2:editBookDialog;subview1:panelForm2:editBookActionDialog"
onActionFunction="setvalue('subview1:panelForm2:newItem', 'edit'); setvalue('subview1:panelForm2:itemId', '#{book.bookId}');"></hx:behavior>
</h:outputLink>
And this is a part of jsp code of the editBookActionDialog.jsp dialog which uses ajax.
<hx:ajaxRefreshRequest id="ajaxRefreshRequest1"
target="subview1:panelForm2:editBookActionDialog"
params="itemId;newItem"
onstart="showProgressBar();" oncomplete="hideProgressBar();">
</hx:ajaxRefreshRequest>
I can't track down why this would happen only in IE, in Firefox it works fine.
Please, any kind of guidance or information about it would be very much appreciated.
Thank you very much in advance,
mismas
[EDIT]
Just a thought that occured to me now.
Maybe this "white cloud" shoud be that gray backgroud, but in IE something gets mixed up with css ...
It seems to me that it could be the right clue, since there is no javascript errors or any kind of other errors ...
Correct me if you think I am missing something ... thnx!
[EDIT2 - IMPORTANT]
I nailed down the cause of it!
It is a css problem.
position: absolute of this lousy HX_DLG_SCRATCH_0 element is causing the issue.
Can you please advise how to override this ibm-jsf generated position:absolute into position:relative?
Also, I would like to add this "hack" only for IE. I know it isn't nice, but it is obviously in the spirit of the whole application :)
Tnx!
Rant:
Sorry I accused ibm-jsf to soon, it was a user (developer who wrote the code) problem.
Nevertheless, whilst digging for solution, I had a chance to dig deeper into jsf and there is only one thing I can say about it: It is awful and I hate its guts.
End of rant :D
The real problem was in the javascript, Mozilla Firefox rendered the page a little less painfully, but IE crached (blocked everything).
So, I had jsp page that had a checkbox which is rendered only under some conditions, but in some hx tag there was custum javascript function call placed (right before openDialog() function) which run some validation on that particular checkbox.
Since, in this case, the checkbox didn't physically existed in the generated HTML, and this javascript function was called, it was causing strange/bad app behaviour, difficult to track down.
So the solution was to add a condition test (the same one as for the checkbox rendering) to call javascript function and openDialog(), if the checkbox should be renderd, otherwise call just openDialog().
That's it, hope it will maybe, somehow, help someone with the same "white cloud" problem ... (I doubt it, but nevertheless here it is :)
P.S.
It was strange that IE developer tools didn't complain about any javascript error ...
I am not sure why is that so ... (if anyone has a clue, I'll be glad to here it ... :)
Best regards,
mismas
In WPF(Windows Presentation Foundation) you can put an image into a button to create an image button, you can also add a text after that, not only one label but more, all on the same button.
My question is how can I do that in JSF with PrimeFaces or another component.
I have included a picture
to let you understand what I did try and what I wanted, any help is appreciated, Thank you.
For JSF
<p:commandButton value="Cancel" icon="ui-icon-myCancel" />
IN css
.ui-icon-myCancel{
background-image: url("#{resource['images/test.jpg']}") !important;
}
JSP
Css:
input#image-button{
background: #ccc url('icon.png') no-repeat top left;
padding-left: 16px;
height: 16px;
}
HTML
<input type="submit" id="image-button" value="Text"></input>
It will give you some hint
I have simple treeTable. http://www.primefaces.org/showcase/ui/treeTable.jsf
I want to change expand and collapse icon of this treeTable. How can I do that?
If you want to use custom icons (images), override the following CSS classes for their respective uses, on the treetable:
ui-icon : to customise the expanded-row state icon (the triangle)
.ui-icon {
width: 16px;
height: 16px;
background-image: url("/your-image-here");
}
ui-icon-triangle-1-e ui-c : to customize the collapsed-row state icon
If you want to use more modern fontAwesome 'icons', see Change icon from jQuery UI to FontAwesome in PrimeFaces
i want to override the below css to the title attribute in h:outputText.
css:
<style type="css/text">
.title
{
border : 1px solid #FF9933;
font-family : verdana;
font-size : 14px;
font-weight:normal;
color: #000000;
background-color:#fae6b0;
padding : 5px 5px 5px 5px";
}
</style>
<h:outputText id="userName"
value="#{userBean.userName}"
title="#{userBean.userName}"/>
<h:outputText id="userAddress"
value="#{userBean.userAddress}"
title="#{userBean.userAddress}"/>
With the help of below link. I tried to change the title attribute in html, it works fine.
How to change the style of Title attribute inside the anchor tag?
how to apply the same thing into the richfaces.
The tooltip as represented by the HTML element's title attribute is not styleable by CSS. The style is fully controlled by the webbrowser and is usually represented in client operating system platform default tooltip style. So, e.g. when the client is running Windows 7, then the tooltip will be presented in Windows 7 default style. Again, you have no control over this.
Your best bet is to replace the title attribute by a fullworthy HTML <div> which appears/disappears on mouseover/out. This allows full control over styling by the usual CSS means. As you already know, RichFaces has a <rich:tooltip> component which does exactly that. If it is insufficient for you for some reason, then you may want to consider to look for another JS/jQuery plugin which will automagically convert all title attributes to styleable <div> elements. One of them is qTip. All you need is then basically:
<h:outputScript name="scripts/jquery.qtip-1.0.0-rc3.min.js" target="head" />
<h:outputScript target="body">$("[title]").qtip();</h:outputScript>
(provided that you're using a RichFaces version which already ships with jQuery bundled, so that you don't need to manually include jQuery)