JavaScript, эквивалентный из пустого оператора (??
) объединения C#, использует логическое ИЛИ (||
):
var whatIWant = someString || "Cookies!";
существуют случаи (разъясненный ниже), что поведение не будет соответствовать поведению C#, но это - общий, краткий способ присвоить значения по умолчанию/альтернативные в JavaScript.
<час> Независимо от типа первого операнда, при кастинге его к булевской переменной приводит к false
, присвоение будет использовать второй операнд. Остерегайтесь всех случаев ниже:
alert(Boolean(null)); // false
alert(Boolean(undefined)); // false
alert(Boolean(0)); // false
alert(Boolean("")); // false
alert(Boolean("false")); // true -- gotcha! :)
Это означает:
var whatIWant = null || new ShinyObject(); // is a new shiny object
var whatIWant = undefined || "well defined"; // is "well defined"
var whatIWant = 0 || 42; // is 42
var whatIWant = "" || "a million bucks"; // is "a million bucks"
var whatIWant = "false" || "no way"; // is "false"
Просто используйте
обычным способом:
<iframe src="/path/to/file.pdf"></iframe>
Если ваша проблема скорее в том, что PDF-файл не находится в WebContent
, а скорее расположен где-то еще в файловой системе диска или даже в базе данных, тогда вам в основном понадобится сервлет
, который получает InputStream
его и записывает его в OutputStream
ответа:
response.reset();
response.setContentType("application/pdf");
response.setContentLength(file.length());
response.setHeader("Content-disposition", "inline; filename=\"" + file.getName() + "\"");
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE);
output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
} finally {
close(output);
close(input);
}
Таким образом, вы можете вместо этого просто указать на этот сервлет :) Например:
<iframe src="/path/to/servlet/file.pdf"></iframe>
Вы можете найти полный пример подобного сервлета в этой статье .
С моей точки зрения, GF проще в администрировании, это лучшее решение с чисто технологической точки зрения, но оно гораздо менее популярно и имеет неопределенный будущее. Я никак не связан с RedHat / JBoss или SUN / GlassFish, моя компания (erudis.pl) поддерживает и развивает оба сервера. ]
также отлично работает в JSF, если вы используете JSF 1.2 или новее. В JSF 1.1 или более ранней версии вам необходимо обернуть простые элементы HTML, такие как
, внутри
(отказ от ответственности: я работаю в Sun и Я в команде GF)
Я согласен с тем, что Seam отлично работает на GlassFish; см. https://blogs.oracle.com/theaquarium/tags/seam
GFv3 сильно отличается от JBoss 5; в частности:
GFv3 спроектирован как очень модульный; запуск сервисов по запросу, есть репозиторий центра обновлений и т.д. GFv3 значительно меньше JBoss 5 и запускается намного быстрее. JBoss 5.1 GA отображается как 130 МБ; GFv3Preview - 50 МБ. GFv3 запускается через пару секунд; JBoss в десятках (вы должны попробовать запуск для своей собственной платформы).
Есть и другие отличия, некоторые унаследованные от GlassFish v2, такие как графическая консоль администратора или интерфейс командной строки администратора.
Более прямое сравнение для JBoss 5 будет быть выпусками GlassFish v2, которые основаны на Java EE 5. Последним выпуском в этом семействе является GFv2.1, выпуск GFv2.1.1 запланирован на октябрь (см. https://blogs.oracle.com/theaquarium /entry/schedule_for_glassfish_v2_1 ).[1210 impressionSun также предоставляет патчи для GlassFish (аналогично поддержке RedHat для JBoss); см. https://blogs.oracle.com/glassfishforbusiness и sun.com/glassfish.
1 GA отображается как 130 МБ; GFv3Preview - 50 МБ. GFv3 запускается через пару секунд; JBoss в десятках (вы должны попробовать запуск для своей собственной платформы).Есть и другие отличия, некоторые унаследованные от GlassFish v2, такие как графическая консоль администратора или интерфейс командной строки администратора.
Более прямое сравнение для JBoss 5 будет быть выпусками GlassFish v2, которые основаны на Java EE 5. Последним выпуском в этом семействе является GFv2.1, выпуск GFv2.1.1 запланирован на октябрь (см. https://blogs.oracle.com/theaquarium /entry/schedule_for_glassfish_v2_1 ).[1210 impressionSun также предоставляет патчи для GlassFish (аналогично поддержке RedHat для JBoss); см. https://blogs.oracle.com/glassfishforbusiness и sun.com/glassfish.
1 GA отображается как 130 МБ; GFv3Preview - 50 МБ. GFv3 запускается через пару секунд; JBoss в десятках (вы должны попробовать запуск для своей собственной платформы).Есть и другие отличия, некоторые унаследованные от GlassFish v2, такие как графическая консоль администратора или интерфейс командной строки администратора.
Более прямое сравнение для JBoss 5 будет быть выпусками GlassFish v2, которые основаны на Java EE 5. Последним выпуском в этом семействе является GFv2.1, выпуск GFv2.1.1 запланирован на октябрь (см. https://blogs.oracle.com/theaquarium /entry/schedule_for_glassfish_v2_1 ).[1210 impressionSun также предоставляет выпуски исправлений для GlassFish (аналогично поддержке RedHat для JBoss); см. https://blogs.oracle.com/glassfishforbusiness и sun.com/glassfish.
JBoss в десятках (вы должны попробовать запуск для своей собственной платформы).Есть и другие отличия, некоторые унаследованные от GlassFish v2, такие как графическая консоль администратора или интерфейс командной строки администратора.
Более прямое сравнение для JBoss 5 будет быть выпусками GlassFish v2, основанными на Java EE 5. Последним выпуском в этом семействе является GFv2.1, а выпуск GFv2.1.1 запланирован на октябрь (см. https://blogs.oracle.com/theaquarium /entry/schedule_for_glassfish_v2_1 ).[1210 impressionSun также предоставляет выпуски исправлений для GlassFish (аналогично поддержке RedHat для JBoss); см. https://blogs.oracle.com/glassfishforbusiness и sun.com/glassfish.
JBoss в десятках (вы должны попробовать запуск для своей собственной платформы).Есть и другие отличия, некоторые унаследованные от GlassFish v2, такие как графическая консоль администратора или интерфейс командной строки администратора.
Более прямое сравнение для JBoss 5 будет быть выпусками GlassFish v2, которые основаны на Java EE 5. Последним выпуском в этом семействе является GFv2.1, выпуск GFv2.1.1 запланирован на октябрь (см. https://blogs.oracle.com/theaquarium /entry/schedule_for_glassfish_v2_1 ).[1210 impressionSun также предоставляет выпуски исправлений для GlassFish (аналогично поддержке RedHat для JBoss); см. https://blogs.oracle.com/glassfishforbusiness и sun.com/glassfish.
Более прямым сравнением для JBoss 5 будут выпуски GlassFish v2, основанные на Java EE 5. Последним выпуском в этом семействе является GFv2.1, а выпуск GFv2.1.1 запланирован на октябрь (см. https://blogs.oracle.com/theaquarium/entry/schedule_for_glassfish_v2_1).
Sun также предоставляет выпуски исправлений для GlassFish (аналогично поддержке RedHat для JBoss); см. https://blogs.oracle.com/glassfishforbusiness и sun.com/glassfish.
Более прямым сравнением для JBoss 5 будут выпуски GlassFish v2, основанные на Java EE 5. Последним выпуском в этом семействе является GFv2.1, а выпуск GFv2.1.1 запланирован на октябрь (см. https://blogs.oracle.com/theaquarium/entry/schedule_for_glassfish_v2_1).
Sun также предоставляет выпуски исправлений для GlassFish (аналогично поддержке RedHat для JBoss); см. https://blogs.oracle.com/glassfishforbusiness и sun.com/glassfish.
Я начал разрабатывать приложение Seam на JBoss и через несколько месяцев попытался заставить его работать на Glassfish. Я нашел среду Glassfish очень противоречивой. Мне пришлось исправить некоторые странные ошибки в GF, и я не мог найти никакой информации в Интернете, поэтому через несколько дней я сдался и вернулся к JBoss. Так что лично я бы не рекомендовал Glassfish.
Это строго то, к чему вы привыкли. Я обнаружил, что настройка и использование JBoss столь же приятны, как попытки бриться зазубренной ложкой во время езды на одноколесном велосипеде без сиденья. Однако Glassfish, похоже, работает.
Мой выбор - Glassfish: он быстрее запускается и развертывает веб-приложения. Консоль администратора очень точная, кроме того, она имеет и графический интерфейс, и командную строку. Теперь он полностью поддерживается Oracle, его будущее больше не является неопределенным. Он основан на OSGi: он действительно модульный. Вы можете легко установить приложения Spring-osgi. Вы можете безболезненно выбирать между Eclipse Link, Apache Open JPA и Hibernate. Он сильно интегрирован в NetBeans (и, конечно, Eclipse).
С другой стороны, Jboss более распространен, и поэтому на нем легко найти работу (IMHO, потому что это старый сервер приложений; glassfish относительно новый).