GWT; смешивание HTML-страниц с Java-кодом - PullRequest
0 голосов
/ 04 января 2012

Мне действительно нравится подход в GWT, в котором вы можете определить «div», «span» и т. Д. На обычной html-странице, а затем в точке входа GWT просто нажать кнопку или какой-либо другой компонент внутри div.

Небольшой пример, вот фрагмент страницы hwml gwt:

<body class='page'>
    <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position: absolute; width: 0; height: 0; border: 0"></iframe>

    <div>
        Query Terms: <span id="txtQuery"></span>&nbsp;
        <span id="btnQuery"></span><br>
        ...
    </div>
</body>

А вот небольшой фрагмент кода java, содержащийся в точке входа gwt:

ClickHandler clickHandler = ...
TextBox txtQuery = new TextBox();
Button btnQuery = new Button("Query", clickHandler);

RootPanel.get("txtQuery").add(txtQuery);
RootPanel.get("btnQuery").add(btnQuery);

Одна из причин, по которой мне нравится этот подход, заключается в том, что он позволяет не Java-кодировщикам создавать / писать html-материалы, а также мне нравится разделение между GWT / java-кодом и html-кодом.

Однако ..Это может хорошо работать для простой веб-страницы, но как вы масштабируете этот подход во многих веб-страницах?Насколько я понимаю, «способ GWT» состоит в том, чтобы иметь одну веб-страницу и использовать историю, чтобы скрывать и показывать различные компоненты GWT.Я построил 2 проекта в GWT, используя эту стандартную технику, но недавно обнаружил, что вы можете делать то, что я показал выше.

Есть ли способ масштабирования вышеупомянутых 2 фрагментов в несколько HTML-страниц, где GWTвставляет свои компоненты в стандартные HTML-страницы?

Ответы [ 2 ]

2 голосов
/ 05 января 2012

здесь нет способ GWT . По крайней мере, в заявлении миссии GWT. Если вы хотите продолжить свой подход, вы можете сделать это несколькими способами.

GWT приложение на странице. (например, на каждой странице есть приложение gwt, специфичное для этой страницы). Вы просто компилируете новый модуль GWT для каждой страницы, где вам нужны некоторые функции GWT. Вы можете использовать несколько из них вместе на одной странице, или ни одного. Этот подход хорош, если ваши GWT-приложения будут очень простыми, и вам не нужно будет использовать такие вещи, как GXT Grid на каждой странице с различными настройками, в противном случае вам придется тратить впустую браузер пользователя, который будет загружать большие куски кода JS снова и снова, и это будет большой проблемой, если у вас много страниц.

Одно большое приложение GWT для всех страниц. Просто поместите все в одно приложение GWT, создайте какой-то переключатель (некоторую переменную js), чтобы приложение знало, что оно должно создать. Можно использовать некоторое разбиение кода, поэтому на каждой странице будут загружаться только те вещи, которые действительно необходимы. Так как один и тот же JS будет использоваться на каждой странице, кэширование должно решить проблему с загрузкой кода приложения снова и снова (но у вас все еще есть проблема с фактическим анализом / запуском кода, когда пользователь изменяет страницу)

Существует также третий подход, самый эффективный из всех, но и самый сложный. Как только пользователь загружает одну из страниц, навигация прекращается, модуль gwt просто берет шаблон для страницы, на которую пользователь хочет перейти, и заменяет текущий HTML-код новым сгенерированным шаблоном. Этого довольно легко достичь, если вы будете использовать TextResource из ClientBundle и HTMLPanel. Проблема заключается в навигации по адресному полю (приложение GWT должно отвечать за изменение адреса, чтобы пользователи могли создавать закладки или отправлять ссылку своим друзьям). Для этого вы будете использовать один сценарий GWT, и рекомендуется некоторое разбиение кода.

Все три подхода полностью действительны, в зависимости от ваших требований вы можете выбрать любой из них. Кроме того, если все, что вам нужно, - это предоставить людям возможность использовать HTML для разметки экранов GWT, вы можете рассмотреть возможность использования комбинации HtmlPanel и TextBesource ClientBundle.

1 голос
/ 05 января 2012

Если цель состоит в том, чтобы дизайнеры работали с HTML, а не с Java, то как насчет UiBinder ? Он даст вам то, что вы хотите (отдельный HTML - или, скорее, XHTML-подобный - код из кода Java) внутри проекта GWT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...