Вам нужно поместить все
/
компоненты в
и привязать их атрибут value
к свойству bean через выражение EL, например #{bean.property}
, поддерживаемое парой getter / setter. При правильной установке JSF автоматически устанавливает значения в компоненте, когда форма отправляется через компонент
в той же форме. Вы можете указать метод действия компонента в атрибуте action
компонента
через выражение EL, подобное #{bean.action}
, которое указывает на голый метод action()
. Все представленные значения доступны прямо там обычным способом Java.
Учитывая этот пример формы JSF с одним полем ввода и одним полем выбора:
Следующий компонент распечатывает предоставленные значения в stdout, доказывая, что JSF уже установил значения задолго до момента доступа к нему в методе действий.
package com.example;
import javax.inject.Named;
import javax.enterprice.context.RequestScoped;
@Named // Use @javax.faces.bean.ManagedBean on outdated environments.
@RequestScoped // Use @javax.faces.bean.RequestScoped on outdated environments.
public class Bean {
private String text;
private String choice;
private String result;
public void submit() {
result = "Submitted values: " + text + ", " + choice;
System.out.println(result);
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getChoice() {
return choice;
}
public void setChoice(String choice) {
this.choice = choice;
}
public String getResult() {
return result;
}
}
Вот и все. Поворот регулярной формы в форму ajax - это вопрос о вложении
в командном компоненте, как показано ниже.
Вы можете найти другой пример и ценные ссылки внизу нашего JSF wiki page .
Обратите внимание, что все, что вы намерены делать с представленными значениями, несут ответственность JSF. Например, манипулируя им, переходя в другой класс, сохраняя его в базе данных и т. Д. Все это не связано с JSF. Он как платформа, основанная на HTML-формах, уже выполнила свою работу по предоставлению вам представленных значений в удобстве использования переменных Java. Остальное зависит от вас.
Чтобы исследовать следующий шаг, вы должны в этот момент просто делать так, как будто у вас уже есть куча готовых / жестко закодированных переменных, а не весь пользовательский интерфейс на основе JSF. Например, чтобы сохранить значения в базе данных, люди обычно используют инфраструктуру уровня бизнес-сервисов, такую как EJB, которая, в свою очередь, использует инфраструктуру уровня сохранения, такую как JPA. Некоторые люди даже используют JDBC «простой ваниль». Для получения дополнительных ссылок на конкретные примеры, начните здесь: JSF-контроллер, служба и DAO .
Что относительно одного или нескольких длинных пробелов (& emsp;)? Предоставленный, это зависело бы от того, каков размер шрифта пользователя. Если это действительно не работает в Вашем дизайне, рассмотрите короткий пробел (& ensp;).
Вы могли бы также хотеть посмотреть эта таблица различных пробелов на Википедию.
Не будет пространство между двумя неразрывными работами пробелов?
& nbsp; & nbsp;
Если Вы не IE предназначения (кроме 8, режим стандартов):
<span style="white-space: pre-wrap"> </span>
Для IE, <span style="width:3ex"></span>
работы в режиме причуд, поэтому объедините их и...
<span style="width:3ex;white-space:pre-wrap"> </span>
, который, кажется, работает везде, я попробовал... кроме стандартов IE7. D'oh!
Как насчет два
сопровождаемый регулярным пространством? Единственный недостаток к тому (насколько я знаю) - то, что, если разрыв строки действительно естественно падает на регулярное пространство, у Вас будет немного конечного пробела на предыдущей строке из-за неразрывных пробелов, но я не думаю, что это когда-либо имело бы значение в фактическом появлении страницы.
это дает 100px в левое пространство между вашим текстом пример пробелов
span style = "margin-left: 100px;"
(n_n)
Могло бы быть лучше предпринять шаги назад и спросить, что это, Вы пытаетесь представить. Что показывает это общедополнительное пространство?
У меня есть точный ответ, который вы ищете. Я везде искал этот ответ, и никто из предложенных не работал идеально. Итак, я придумал решение, попробовал его и был поражен тем, что оно работает без каких-либо изъянов!
Гарроу был на самом деле прав (он просто не объяснил и не усвоил это полностью). Решение состоит в том, чтобы вместо одного & nbsp;
указать & nbsp;
. Просто выполните простой поиск, замените и добавьте тег
после каждого & nbsp;
. Работает отлично!
Тег
- это малоизвестный тег, поддерживаемый во всех основных браузерах, который сообщает браузеру помещать здесь новую строку ТОЛЬКО, если это необходимо.
Обновление: я обнаружил один браузер, в котором это не работает точно - IE 8! Они действительно удалили тег
! Я решил эту проблему, создав класс, который говорит:
.wbr:before { content: "\200B" }
и вместо замены & nbsp;
на & nbsp;
, замените его следующим:
<wbr><span class='wbr'></span>
В PHP , это будет выглядеть так:
$text = str_replace(" "," <wbr><span class='wbr'></span>", $text);
Не забудьте также добавить класс.
Очевидно, это становится немного излишним, заменяя один пробел всем этим, но это работает так же, как и нужно, и поскольку Я никогда не видел разметки, которая у меня работала.
Если это слишком беспорядочно, другое решение - заменить двойные пробелы на & nbsp;
, за которыми следует нормальный пробел. Это будет чередовать & nbsp;
и обычные пробелы и работает в моих тестах.
В PHP это будет выглядеть так:
$text = str_replace(" "," ", $text);
Надеюсь, это поможет! Я вложил в это достаточно исследований; Я думал, что должен передать это дальше.