Параметры URL кнопки JSF

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

Существует ли решение?

7
задан DD. 27 December 2012 в 13:56
поделиться

2 ответа

Запрос 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¶m2=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;
}
17
ответ дан 6 December 2019 в 08:14
поделиться

С кнопкой вы связываете действие , которое является методом в компоненте поддержки. Вы можете установить параметры в bean-компоненте поддержки и прочитать их при нажатии кнопки из метода, связанного с действием 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>

Поддерживающий компонент:

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)

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

5
ответ дан 6 December 2019 в 08:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: