2012-03-09 2 views
0

это изменить мой вопрос, который был первым, как применять 2 макетов в одной и той же странице GSP, но теперь я получил проблему с 3-х раскладок :):с использованием 3 макетов на одной странице GSP

Я довольно новыми для всех что css и макет, и я использую grails 2.0 version У меня есть следующие модули в моей проблеме:
1. main.gsp layout, который в основном имеет хороший заголовок с логотипом компании для всех страниц.
2. mainTabPanle.gsp layouts, которые в основном содержат некоторые основные вкладки, все страницы должны иметь 3. layout.ag.gsp, в котором в основном содержатся хорошие вкладки отчета и короткий код javascript для управления выбранным цветом вкладки, который должен иметь все отчеты gsp-страниц.

Что я пытаюсь сделать, так это использовать этот макет reportTab во всех страницах отчетов gsp.

так это то, что я получил до сих пор:

main.gsp:

<!doctype html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<link rel="stylesheet" href="${resource(dir: 'css', file: 'main.css')}"type="text/css"> 
<g:layoutHead/> 
<r:layoutResources /> 
</head> 
<body style="height:100%"> 
<div>some nice header in here </div> 
<g:layoutBody/> 
<r:layoutResources /> 
</body> 
</html> 

mainTabPanle.gsp (также находится в папке макета)

<g:applyLayout name="main">  
<!doctype html> 
<html> 
<head> 
<g:layoutHead/> 
<r:layoutResources /> 
</head> 
<body> 
<div>some main tabs here </div> 
<g:layoutBody/> 
</body> 
<script type="text/javascript"> 
//script to manipulate main tabs  
</script> 
<r:layoutResources /> 
</body> 
</html> 
</g:applyLayout> 

reportTabPanel.gsp:

<g:applyLayout name="mainTabPanel">  
<!doctype html> 
<html> 
<head> 
<g:layoutHead/> 
<r:layoutResources /> 
</head> 
<body> 
<div>some reports tab panel </div> 
<g:layoutBody/> 
</body> 
<script type="text/javascript"> 
//some script to manipulate report tab item 
</script> 
<r:layoutResources /> 
</body> 
</html> 
</g:applyLayout> 

и теперь им, используя в moneyreport.gsp заголовок следующую строку:

<meta name="layout" content="reportTabPanel" /> 

то, что я хочу видеть это хороший заголовок и maintabsPanel и reportTabPanel, но все, что я вижу, это тело moneyreport.gsp

странно то, что, если я использую это:

<meta name="layout" content="mainTabPanel" /> 

внутри moneyreport.gsp я вижу mainTab и тело moneyreport.gsp, как ожидалось.

Что я делаю неправильно? Я не могу использовать 3 макета на одной странице?

спасибо за вашу помощь ребята ...

ответ

1

Вы можете применить 2 макетов на той же странице. Чтобы применить другой макет в файле макета, вам нужно использовать тег applyLayout. Ваш reportTab должен быть примерно таким:

<g:applyLayout name="main">  
<!doctype html> 
<head> 
<g:layoutHead/> 
<r:layoutResources /> 
</head> 
<body> 
<div> some nice tabs here </div> 
<g:layoutBody/> 
</body> 
<script type="text/javascript"> 
few line script handling chosen tab color in here 
</script> 
<r:layoutResources /> 
</body> 
</html> 
</g:applyLayout> 
+0

anju i edit my question .... в основном то, что вы сказали, работало отлично. Я попытался использовать ту же логику, чтобы применить 3 макета, и это не сработает. Интересно, сможешь ли ты снова исправить меня. заранее спасибо! – zevel80300

+0

@ user511875: Вы можете использовать любое количество макетов на одной странице. Единственная проблема, которую я вижу в коде, который вы опубликовали, - это опечатка в названии файла, о котором вы упоминали (это написано mainTabPanle вместо mainTabPanel). Я протестировал код, который вы опубликовали, и он работает нормально –

+0

действительно?!?!?! вы проверили мой код и его работоспособность ??? если это имеет место в его замечательных новостях ... к сожалению, я должен отложить это в сторону слишком много вещей, чтобы добиться успеха здесь на работе. но, судя по тому, что я почти уверен, что вы сказали, так много спасибо за свою помощь и за то время, которое вы поставили, чтобы помочь мне. как только я получу некоторое свободное время, чтобы сохранить этот проект, я отправлю еще один ответ, что он работает :) спасибо большое помощник – zevel80300

0

первое спасибо за ваш ответ Anuj!

это вид работы, но в неправильном направлении Потому что я получаю странный источник HTML: я получаю 2 верхние и 2 метки тела так, в основном Grails просто копировать вставить весь макет вместе, и это было не хорошо HTML страницы даже если браузер отобразит его правильно!

Я нашел то, что мне нужно, и это просто использует шаблоны! , например, у меня есть файл с именем «_mainHeader.gsp», который выглядит следующим образом:

<!-- this is my main header for all gsp pages --> 
<!doctype html> 
<html lang="en" class="no-js"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<title>IntentIQ Management System</title> 
<link rel="stylesheet" href="${resource(dir: 'css', file: 'main.css')}"type="text/css"> 
<link rel="shortcut icon" href="${resource(dir:'images/myImg',file:'favicon.ico')}" type="image/x-icon"> 

и со всех страниц я могу использовать эти строки, как, например, в page1.GSP:

<g:render template="/templates/mainHeader" /> 
</head> 
<body> 
<h1> this is page1 with header from mainHeader.gsp template </h1> 
</body> 
</html> 

обратить внимание для тех, кто когда-либо, кто читает это, чтобы: 1.temmplate имя файла с «_» символ 2.the закрывающий тег тела в «page1.gsp» закрывает тег тело начало в файле "_mainHeader.gsp".

так что в основном этот материал tempaltes - это своего рода копия пасты частей страниц gsp и ее отлично работает! спасибо за ваш ответ, тем не менее!

+0

Ну, решение, которое вы предоставили, не вызывает сомнений, но оно не так чисто, как вы бы хотели. Причина, по которой вы получили странный html в более раннем решении, заключалась в том, что тег applyLayout не был закрыт. См. Мое редактирование. –

Смежные вопросы