Параметры URL команды JSF commandButton - PullRequest
7 голосов
/ 09 июня 2010

Я хотел бы создать кнопку, которая будет переходить на другой URL и передавать некоторые параметры запроса в URL.OutputLink работает, но мне нужна кнопка, кнопка command выглядит хорошо, но я могу передавать параметры.

Есть ли решение?

Ответы [ 2 ]

17 голосов
/ 09 июня 2010

h:commandButton не запускает запрос GET, а POST, поэтому вы не можете его использовать. Если вы уже используете JSF 2.0 и целевая страница находится в том же контексте, тогда вы можете использовать h:button для этого:

<h:button value="press here" outcome="otherViewId">
    <f:param name="param1" value="value1" />
    <f:param name="param2" value="value2" />
</h:button>

(здесь не требуется h:form, как в h:outputLink). Это создаст кнопку, которая перейдет к otherViewId.jsf?param1=value1&param2=value2.

Но если вы еще не используете JSF 2.0, тогда вам лучше всего воспользоваться CSS, чтобы оформить ссылку как кнопку.

<h:outputLink styleClass="button">

с чем-то вроде

a.button {
    display: inline-block;
    background: lightgray;
    border: 2px outset lightgray;
    cursor: default;
}
a.button:active {
    border-style: inset;
}
5 голосов
/ 09 июня 2010

С помощью кнопки вы связываете action, который является методом в компоненте поддержки. Вы можете установить параметры в компоненте поддержки и читать их при нажатии кнопки из метода, связанного с action.Метод действия должен возвращать String, который будет считан обработчиком навигации, чтобы проверить, нужно ли переходить на новую страницу, в соответствии с конфигурацией в faces-config.xml.

<h:form>
    <h:commandButton value="Press here" action="#{myBean.action}">
        <f:setPropertyActionListener target="#{myBean.propertyName1}" value="propertyValue1" />
        <f:setPropertyActionListener target="#{myBean.propertyName2}" value="propertyValue2" />
    </h:commandButton>
</h:form>

Backingbean:

package mypackage;


public class MyBean {

    // Init --------------------------------------------------------------------------------------

    private String propertyName1;
    private String propertyName2;

    // Actions -----------------------------------------------------------------------------------

    public void action() {
        System.out.println("propertyName1: " + propertyName1);
        System.out.println("propertyName2: " + propertyName2);
    }

    // Setters -----------------------------------------------------------------------------------

    public void setPropertyName1(String propertyName1) {
        this.propertyName1 = propertyName1;
    }

    public void setPropertyName2(String propertyName2) {
        this.propertyName2 = propertyName2;
    }

}

Этот пример взят из здесь (блог BalusC, возможно, он придет и скажет вам проверить эту ссылку, но я быстрее!: P)

Конечно, для достижения этой цели боб должен быть установлен как session scoped.Если вы хотите, чтобы он был request scoped, вы можете выполнить шаги здесь

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