2012-01-18 37 views
8

Tôi đang chuyển đổi một ứng dụng web Tiles 1 hiện có thành kiến ​​trúc Tiles 2. Tôi gặp khó khăn khi truyền các giá trị từ trang JSP đến các thuộc tính của ô.Làm cách nào để truyền giá trị từ JSP đến thuộc tính tile?

Đây là tập tin định nghĩa gạch của tôi (gạch-definition.xml)

<tiles-definitions> 

    <definition name="cda.layout" template="/jsp/layouts/layout.jsp"> 
     <put-attribute name="pageTitle" value="StoryTitle" type="string"/> 
     <put-attribute name="pageHeader" value="StoryHeader" type="string"/> 
     <put-attribute name="resources" value="" type="string"/> 
    </definition> 

</tiles-definitions> 

Các layout.jsp trông giống như:

<html> 
    <head> 
    <title><tiles:insertAttribute name="pageTitle" flush="true"/></title> 
    </head> 

    <body> 
    ... 
    ... 

    <div class="content"> 
    <h1><tiles:insertAttribute name="pageHeader" flush="true"/></h1> 
    </div> 

    ... 
    ... 
    </body> 
</html> 

Tôi có một trang câu chuyện trong đó sử dụng cách bố trí và cần phải chuyển giá trị cho thuộc tính mẫu.

<% 
    // create a business object and populate 
    String mytitle= story.getTitle(); 
    String myheader = story.getHeader(); 
    %> 

<tiles:insertTemplate template="../layouts/layout.jsp" flush="false" > 
    <tiles:putAttribute name="pageTitle" value="${mytitle}"/> 
    <tiles:putAttribute name="pageHeader"value="${myheader}"/> 
</tiles:insertTemplate> 

Trong story.jsp, tôi có thể System.out.print() giá trị cho mytitle, myheader và chúng hiển thị chính xác. Tuy nhiên, các giá trị này KHÔNG được chuyển cho các thuộc tính tile.

Bất kỳ ý tưởng nào về cách sửa lỗi này?

Trả lời

17

${mytitle} là biểu thức JSP EL có nghĩa là: tìm thuộc tính trong phạm vi trang hoặc phạm vi yêu cầu hoặc phạm vi phiên hoặc phạm vi ứng dụng, có tên là "mytitle".

Bằng cách xác định biến tập lệnh, bạn chưa xác định thuộc tính trong bất kỳ phạm vi nào trong số này. Nó sẽ hoạt động nếu bạn có

pageContext.setAttribute("mytitle", mytitle); 

Nhưng sử dụng tập lệnh trong JSP là thực hành không tốt. Tôi không biết hạt câu chuyện của bạn xuất phát từ đâu, nhưng đó có thể là thuộc tính yêu cầu. Nếu vậy, bạn có thể định nghĩa thuộc tính trang-phạm vi mới theo cách này, bằng cách sử dụng JSTL:

<c:set var="mytitle" value="${story.title}"/> 

này là không cần thiết tuy nhiên, kể từ khi bạn có thể sử dụng biểu thức này trực tiếp trong gạch thẻ:

<tiles:putAttribute name="pageTitle" value="${story.title}"/> 

Đọc thêm về JSP EL trong this tutorial.

+0

JB, giải pháp đó đã hoạt động. Cảm ơn rất nhiều. –

+0

Cảm ơn câu trả lời của bạn, tôi đang sử dụng giải pháp này nhưng vấn đề là đầu ra sẽ là $ {story.title} Tiêu đề của câu chuyện. Khi bạn thấy $ {story.title} sẽ được coi là biến và giá trị. Mặc dù, tôi chỉ chuyển nó từ Java chứ không phải JSP. –

Các vấn đề liên quan