Наше программное обеспечение и распределено локально клиентам и вручено от сетевого ресурса. Мы выбрали генерацию и файл CHM и ряд файлов HTML для обслуживания от сети. Пользователи, запускающие программу локально, используют файл CHM, и пользователи, получающие их программу, врученную от сетевого ресурса, должны использовать файлы HTML.
Мы используем Справка и Руководство и можем таким образом легко произвести оба типа вывода из того же исходного проекта. Файлы HTML также содержат ищущие возможности, и не требует веб-сервера, поэтому хотя это не оптимальное решение, хорошо работает.
До сих пор все однофайловые типы для Windows кажется поврежденным так или иначе:
Я нашел здесь некоторую информацию из
Это решение сработало для меня.
В этом случае обычно у вас есть создать новое определение, расширяющее из существующего заполните атрибут в правильном шаблоне и назначить новое определение как атрибут основного шаблона.
Другими словами:
<definition name="product.nav" template="/productNavLayout.jsp">
<put-attribute name="productPathNav" value="/productPathNav.jsp" />
<put-attribute name="productNav" value="/productNav.jsp" />
</definition>
<definition name="product.nav.extended" extends="product.nav">
<put-attribute name="productContent" value="product.grid" />
</definition>
<definition name="page.products" extends="layout">
<put-attribute name="content" value="product.nav.extended" />
</definition>
Прошло много времени с тех пор, как я использовал Struts Tiles, но не следует ли вам использовать
вместо
?
То есть что-то вроде:
<tiles:insert attribute="userContent" flush="false"/>
Как видно из вашего вопроса, вы используете разные имена для атрибута содержимого. Это контент
для user.layout и userContent
для user.page.
Можете ли вы попробовать использовать одно и то же имя для этого атрибута либо content
, либо userContent
?
Надеюсь, это поможет.
Обновление. Это быстрые хакерские решения. Вы можете использовать атрибут ignore, для которого установлено значение true для плиток: получить операцию. Это будет происходить тихо, если не определен userContent.
Но я думаю, что что-то не так с определениями тайлов.
Сообщение об ошибке предполагает, что вы пытаетесь использовать тайл, который не определен. Я составил пример, в котором .user.layout
является расширением .basic.layout
. Разница между ними заключается в части тела.
<definition name=".basic.layout" path="/WEB-INF/jsps/basicLayout.jsp">
<put name="header" value="/WEB-INF/jsps/header.jsp"/>
<put name="content" value="/WEB-INF/jsps/basicLayout.jsp"/>
<put name="footer" value="/WEB-INF/jsps/footer.jsp"/>
</definition>
<!-- extending content part of basic layout -->
<definition name=".user.content" value="/WEB-INF/jsps/user/layout.jsp">
<put name="userContent" value="/WEB-INF/jsps/user/page.jsp"/>
</definition>
<!-- defining new layout -->
<definition name=".user.layout" extends=".basic.layout">
<put name="content" value=".user.content"/>
</defnition>
<definition name=".user.page" extends=".user.layout">
<put name="userContent" value="/WEB-INF/jsps/page.jsp"/>
</definition>
<definition name=".user.info" extends=".user.layout">
<put name="userContent" value="/WEB-INF/jsps/userInfo.jsp"/>
</definition>
<definition name=".other.page" extends=".basic.layout">
<put name="content" value="/WEB-INF/jsps/other.jsp"/>
</definition>