Я использую Primefaces p: graphicImage для отображения изображения всех зарегистрированных пользователей. Все работает почти отлично, за исключением того, что мои фотографии выглядят как негативы. Что я могу делать неправильно. Вот мой код:Отображение изображения Использование p: graphicImage. Картинки выглядят как негативы
<sec:authorize access="isAuthenticated()">
<span>
<p:graphicImage value="#{currentUser.image}" class="img-thumbnail pull-right"
height="80px;" width="80px;" >
<f:param name="id" value="#{request.remoteUser}" />
</p:graphicImage>
</span>
.....
And here is the JSF Managed Bean
@Named(value = "currentUser")
@ApplicationScoped
public class CurrentUser implements Serializable {
@EJB
private VempDetailsFacade vempDetailsFacade;
private VempDetails details;
public StreamedContent getImage() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
// So, we're rendering the HTML. Return a stub StreamedContent so that it will generate right URL.
return new DefaultStreamedContent();
} else {
// So, browser is requesting the image. Return a real StreamedContent with the image bytes.
String imageId = context.getExternalContext().getRequestParameterMap().get("id");
details = vempDetailsFacade.find(imageId);
if (details != null) {
try {
return new DefaultStreamedContent(new ByteArrayInputStream(details.getEmpImage()));
} catch (Exception e) {
System.err.println("No Image Retrieved : "+e.getMessage());
}
}
return null;
}
}
public VempDetails getDetails() {
return details;
}
public void setDetails(VempDetails details) {
this.details = details;
}
@PostConstruct
public void init() {
details = vempDetailsFacade.
find(FacesContext.getCurrentInstance().getExternalContext().getRemoteUser());
}
}
Что я могу делать неправильно. Одни и те же фотографии, отображаемые в обычном дисплее свинга приложения без каких-либо проблем
Update На Кодексе
@BalusC Вот это быстрый код теста, который отображает изображение на качелях.
public DisplayImage() {
super("Image Display");
setSize(600, 600);
connection = getConnection();
try {
statement = connection
.prepareStatement("SELECT empImage FROM v_empDetails WHERE empCode=?");
statement.setString(1, "009");
result = statement.executeQuery();
byte[] image = null;
//just a result anyway
while (result.next()) {
image = result.getBytes(1);
}
Image img = Toolkit.getDefaultToolkit().createImage(image);
ImageIcon icon = new ImageIcon(img);
JLabel lPhoto = new JLabel();
lPhoto.setIcon(icon);
add(lPhoto);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setVisible(true);
}
public Connection getConnection() {
Connection connection = null;
........
Может быть, что Toolkit.getDefaultToolkit() createImage (изображение). линия делает re-invert. Изображения заполнялись с использованием другого приложения, и это скорее обновление, чтобы иметь его как веб-приложение.
Спасибо за ваш совет заранее.
благодарит брата за указатель, воссоздал фотографию, сохранив те, которые были повторно перевернуты локально, очищая сохраненную в базе данных и повторно загружая изображения. Дисплей теперь работает как шарм .... ;-) –