важная вещь понять с "новым" HTML5 file
API состоит в том, что он не поддерживался до IEВ 10. Если определенный рынок, к которому Вы стремитесь, имеет более высокую, чем среднее число склонность к более старым версиям Windows, у Вас не могло бы быть доступа к нему.
По состоянию на 2017, приблизительно 5% браузеров являются одним из IE 6, 7, 8 или 9. Если Вы направляетесь в крупную корпорацию (например, это - инструмент B2B или что-то, что Вы поставляете для обучения), что число может взлететь. В 2016 я имел дело с компанией с помощью IE8 на более чем 60% их машин.
Это - 2019 с этого редактирования, спустя почти 11 лет после моего первоначального ответа. IE9 и ниже глобально вокруг 1%-й метки, но существуют все еще кластеры более высокого использования.
важная еда на дом от этого — безотносительно feature—, проверка, какой браузер Ваш пользователи используют . Если Вы не сделаете, Вы извлечете быстрый и болезненный урок в том, почему "работы для меня" не достаточно хорошо в поставляемом компоненте клиенту. caniuse является полезным инструментом, но отметьте, где они получают свою демографию от. Они не могут выровняться с Вашим. Это никогда не более верно, чем корпоративная среда.
Мой ответ с 2008 следует.
Однако существуют жизнеспособные методы non-JS загрузок файла. Можно создать iframe на странице (что Вы скрываетесь с CSS), и затем будьте нацелены на свою форму для регистрации на это iframe. Основная страница не должна перемещаться.
Это - "реальное" сообщение, таким образом, это не является совершенно интерактивным. При необходимости в состоянии, Вам нужно что-то серверная сторона для обработки этого. Это варьируется в широком масштабе в зависимости от Вашего сервера. ASP.NET имеет более хорошие механизмы. Простые сбои PHP, но можно использовать Perl или модификации Apache для обхождения его.
, Если Вам нужны несколько загрузок файла, лучше, действительно каждый регистрируют по одному (для преодоления максимальных пределов загрузки файла). Отправьте первую форму на iframe, контролируйте его прогресс с помощью вышеупомянутого и когда это закончилось, отправьте вторую форму на iframe и так далее.
Или использование решение для Java/Flash. Они намного более гибки в том, что они могут сделать с их сообщениями...
Хотя это старый вопрос, здесь может быть еще одно решение: wicket:enclosure (и this )
Update: Теперь мне понадобилась эта функциональность самостоятельно (для jetwick). Я использую WebMarkupContainer один для состояния loggedIn и один для состояния loggedOut и устанавливаю правильную видимость:
if (loggedIn()) {
WebMarkupContainer loggedInContainer = new WebMarkupContainer("loggedIn");
//## do something with the user
User user = getUserSomeWhere();
loggedInContainer.add(new UserSearchLink("userSearchLink"));
add(loggedInContainer);
add(WebMarkupContainer("loggedOut").setVisible(false));
} else {
add(new WebMarkupContainer("loggedIn").setVisible(false));
WebMarkupContainer loggedOutContainer = WebMarkupContainer("loggedOut");
loggedOutContainer.add(new LoginLink() {...});
add(loggedOutContainer);
}
Преимущество этого для меня в том, что я предотвращаю NullpointerExc в //## отмеченной строке и функция enclose в wicket выглядела бы более уродливо в этом случае, я думаю.
Думаю, поэтому существует EmptyPanel . Не зная больше о вашем коде, я могу только сказать, что то, что я думаю, вы делаете, я бы сделал с комбинацией некоторого дочернего элемента AbstractRepeater и Fragment . Если вы хотите рассказать больше о том, что вы хотите сделать, и, возможно, предоставить еще какой-то код, я буду рад помочь, чем смогу.
вы можете вызвать setVisible (false); на компоненте, который вы хотите скрыть.
Как сказал @miaubiz, вы можете вызвать setVisible (false) или переопределить метод isVisible (), если видимость зависит от другого состояния (например, поля заполнены).
Да, вы хотите переопределить isVisible. Это не позволит html-разметке isVisible=false даже отображаться на конечной html-странице. Также, согласно документации (упоминается в EmptyPanel), вы можете использовать WebMarkupContainer в качестве обертывающего компонента.
this.add(new SimpleResourceModelLabel(NO_DATA_LABEL){
private static final long serialVersionUID = 1L;
@Override
public boolean isVisible() { return myList.isEmpty(); }
});
final WebMarkupContainer table = new WebMarkupContainer(MY_DATA_TABLE){
private static final long serialVersionUID = 1L;
@Override
public boolean isVisible() { return !myList.isEmpty(); }
};