Отправка формы и передача параметров через URL - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть окно, в котором пользователь может искать все автомобили в базе данных и редактировать детали автомобиля, когда пользователь нажимает кнопку редактирования (код ниже) на данном автомобиле, вызывается следующий JavaScript, чтобы открыть Новое окно:

  <!--EDIT BUTTON -->  
  <h:commandLink value=""
        onclick="return CarEditCrud(this);" title="Edit Car">
        <t:graphicImage rendered="true" value="/imgs/edit.gif"
            styleClass="edit" />
        <f:param value="#{car.carPK}" name="carCode" />
    </h:commandLink>

 <!--FUNCTION TO OPEN NEW WINDOW TO EDIT CAR DETAIL -->  
 function CarEditCrud(val) {   
 ....    
 window.open("EditCarCrud.faces?carPK=" + pk);
 }

Таким образом, открывается новое окно с URL-адресом localhost:80/jsp/EditCarCrud.faces?carPK=" + pk (ПРИМЕЧАНИЕ: PK будет числом, подобным 935533) и в конструкторе EditCarCrud Backbean я делаю следующее, чтобы получить информацию об автомобиле и заполнить поля:

Map requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String code = (String) requestMap.get("carCode");

Это все хорошо. Проблема в том, что у Backbean есть область действия Request, когда пользователь нажимает Submit, я теряю всю эту информацию (carCode), поэтому URL теперь localhost:80/jsp/EditCarCrud.faces.

UPDATE:

Кроме того, есть selectOneItem, который имеет

  ....
  valueChangeListener="#{carEditCurd.countrycodechange}"
  onchange="submit()"

Есть ли способ сохранить код URL в URL-адресе, как это было при первоначальном открытии окна с PK в URL-адресе?

1 Ответ

3 голосов
/ 06 декабря 2011

Я предполагаю, что вы все еще используете JSF 1.x.

Вам необходимо сохранить параметр запроса в последующих формах на <f:param>:

<h:commandLink value="Submit" ...>
    <f:param name="carCode" value="#{param.carCode}" />
</h:commandLink>

Это не заканчивается в URL, но доступно как параметр запроса POST обычным способом. <managed-property> - кстати, более чистый способ позволить JSF устанавливать произвольные параметры запроса в качестве свойств компонента.

Альтернативой является добавление в форму простого HTML <input type="hidden">, чтобы он также передавался при изменении раскрывающегося списка с onchange="submit()" внутри той же формы:

<input type="hidden" name="carCode" value="<h:outputText value="#{param.carCode}" />" />

(да, с уродливым <h:outputText>, вложенным в качестве значения, это просто для предотвращения возможных атак XSS)

Обратите внимание, что <h:inputHidden> не может использоваться, так как теряет свое значение при сбое проверки в форме.

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