Datatable со строками входов - PullRequest
0 голосов
/ 18 мая 2009

У меня есть таблица данных, которая генерирует строки ввода текста и списки выбора, и когда я отправляю значения равны нулю. Я понимаю, что это потому, что JSF генерирует отдельные случайные идентификаторы для каждого входа. Мне действительно нужны данные по строкам, а затем разобрать, что мне нужно. Есть предложения?

<h:dataTable id="returnableItems" value="#{returnableItemsBean.orderCustomerFamilyItems}" var="item" styleClass="data stripeTable center">
  <h:column>
    <f:facet name="header">Item Number</f:facet>
    <h:outputText id="itemNum" value="#{item.itemNum}"/>
  </h:column>
  <h:column>
    <f:facet name="header">Description</f:facet>
    <h:outputText value="#{item.itemDescription}"/>
  </h:column>
  <h:column>
    <f:facet name="header">Original Quantity</f:facet>
    <h:outputText value="#{item.originalQuantity}"/>
  </h:column>
  <h:column>
    <f:facet name="header">Remaining Quantity</f:facet>
    <h:outputText value="#{item.eligibleQuantity}"/>
  </h:column>
  <h:column>
    <f:facet name="header">Quantity For Return</f:facet>
    <h:panelGrid styleClass="stepper">
      <span class="ns ui-stepper">
        <input id="returnQuantity" type="text" name="returnQuantity" size="2" autocomplete="off" class="ui-stepper-textbox" value="0" />
        <button type="button" name="ns_button_1_0" value="" class="ui-stepper-plus" onclick="setMaxVal(this,#{item.eligibleQuantity});">+</button>
        <button type="button" name="ns_button_2_0" value="" class="ui-stepper-minus">-</button>
      </span>
    </h:panelGrid>
  </h:column>
  <h:column>
    <f:facet name="header">Reason for Return</f:facet>
    <h:selectOneMenu id="returnReason" value="#{returnableItemsBean.orderReason.ordReasonCode}">
      <f:selectItems value="#{returnableItemsBean.orderReasons}"/>
      <f:converter  converterId="orderReasonConverter"/>
    </h:selectOneMenu>
  </h:column>
  <h:column>
    <f:facet name="header">Return/Replacement</f:facet>
    <h:selectOneMenu id="returnOption">
      <f:selectItem itemLabel="Option" itemValue=""/>
      <f:selectItem itemLabel="Return" itemValue="return"/>
      <f:selectItem itemLabel="Replacement" itemValue="replacement"/>
    </h:selectOneMenu>
  </h:column>
</h:dataTable>

Ответы [ 2 ]

2 голосов
/ 19 мая 2009

Я не понимаю, почему вы используете HTML-ввод и кнопки, а не JSF в вашей форме. Вместо этого используйте <h:inputText> и <h:commandButton> и привяжите их значения к свойству в компоненте поддержки. Конечно, вся таблица должна быть внутри тега <h:form> ... </h:form>.

Кроме того, ваш ввод, вероятно, должен быть привязан к свойству переменной "item", как вы делаете для вывода. Если нет, то каждая строка будет иметь привязку к одному и тому же свойству вашего компонента поддержки.

Используете ли вы JSP или Facelets?

0 голосов
/ 19 мая 2009

jsf генерирует отдельные случайные идентификаторы для каждого входа

Идентификаторы не случайны; h: dataTable является NamingContainer и управляет его дочерними clientId s, чтобы они стали уникальными (требование спецификации HTML). JSF: работа с идентификаторами компонентов (id против clientId) .

Простой HTML-код, который вы добавили, будет трудно интегрировать со структурой JSF-модель-представление-презентатор. Было бы лучше придерживаться элементов управления JSF. Этот код показывает, как вы можете манипулировать значениями полей на стороне клиента, используя JavaScript и пользовательскую функцию TLD :

  <h:dataTable value="#{rowDataBean.data}" var="row">
    <h:column>
      <f:facet name="header">
        <h:outputText value="product" />
      </f:facet>
      <h:outputText value="#{row.name}" />
    </h:column>
    <h:column id="column2">
      <f:facet name="header">
        <h:outputText value="quantity" />
      </f:facet>
      <h:inputText id="quantityCount" value="#{row.quantity}" />
      <h:commandButton value="+"
        onclick="increment('#{id:clientId('quantityCount')}'); return false;" />
    </h:column>
  </h:dataTable>

Вызванный JavaScript:

function increment(id) {
  //TODO: error handling
  var textField = document.getElementById(id);
  var value = textField.value;
  value++;
  textField.value = value;
}

Если вы используете Facelets вместо JSP, вам нужно определить функцию в библиотеке тегов Facelets .

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