Используйте атрибут f: для commandButton вместо f: param для h: commandLink - PullRequest
7 голосов
/ 07 марта 2011

Я хотел бы включить определенную страницу в зависимости от нажатия кнопки.

Что касается h:commandButton, я не смог использовать f:param, поэтому похоже, что я должен использовать тег f:attribute.

В случае f:param я бы кодировал так:

<h:commandLink action="connectedFilein">
    <f:param name="fileId" value="#{fileRecord.fileId}"/>
<h:commandLink>

<c:if test="#{requestParameters.fileId!=null}">
    <ui:include src="fileOut.xhtml" id="searchOutResults"/>
</c:if>

Что такое f:attribuite чехол?

спасибо

1 Ответ

15 голосов
/ 07 марта 2011

Я предполагаю, что вы используете JSF 1.x, иначе этот вопрос не имеет смысла.<f:param> в <h:commandButton> действительно не поддерживается в устаревшем JSF 1.x, но поддерживается начиная с JSF 2.0.

<f:attribute> может использоваться в сочетании с actionListener.

<h:commandButton action="connectedFilein" actionListener="#{bean.listener}">
    <f:attribute name="fileId" value="#{fileRecord.fileId}" />
</h:commandButton>

с

public void listener(ActionEvent event) {
    this.fileId = (Long) event.getComponent().getAttributes().get("fileId");
}

(при условии, что он имеет значение Longтип, который является классическим для идентификатора)


Однако лучше использовать представленный JSF 1.2 <f:setPropertyActionListener>.

<h:commandButton action="connectedFilein">
    <f:setPropertyActionListener target="#{bean.fileId}" value="#{fileRecord.fileId}" />
</h:commandButton>

Или когда выЕсли вы уже используете контейнер с сервлетом 3.0 / EL 2.2 (Tomcat 7, Glassfish 3 и т. д.), и ваш web.xml объявлен как Servlet 3.0, вы можете просто передать его в качестве аргумента метода.

<h:commandButton action="#{bean.show(fileRecord.fileId)}" />

с

public String show(Long fileId) {
    this.fileId = fileId;
    return "connectedFilein";
}

Вне зависимости от конкретной проблемы, я настоятельно рекомендую использовать теги JSF / Facelets вместо тегов JSTL , когда это возможно .

<ui:fragment rendered="#{bean.fileId != null}">
    <ui:include src="fileOut.xhtml" id="searchOutResults"/>
</ui:fragment>

(A <h:panelGroup> также возможен и наилучший подход при использовании JSP вместо Facelets)

...