: селектор только для чтения не работает на теге select?

Вы можете использовать метод doGet() сервлета для предварительной обработки запроса и пересылки запроса в JSP. Затем просто укажите URL-адрес сервлета вместо URL-адреса JSP в ссылках и адресной строке браузера.

Например,

@WebServlet("/products")
public class ProductsServlet extends HttpServlet {

    @EJB
    private ProductService productService;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List products = productService.list();
        request.setAttribute("products", products);
        request.getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);
    }

}
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
...

        
${product.name} ${product.description} ${product.price}

Обратите внимание, что файл JSP помещается внутри папки /WEB-INF чтобы запретить пользователям напрямую обращаться к нему без вызова сервлета.

Также обратите внимание, что @WebServlet доступен только с сервлета 3.0 (Tomcat 7 и т. д.), см. также аннотацию @WebServlet с Tomcat 7 . Если вы не можете обновить или когда вам по какой-то причине нужно использовать web.xml, который несовместим с Servlet 3.0, вам необходимо вручную зарегистрировать сервлет старомодным способом в web.xml, как показано ниже, вместо используя аннотацию:


    productsServlet
    com.example.ProductsServlet


    productsServlet
    /products

После правильной регистрации сервлета по аннотации или XML теперь вы можете открыть его с помощью http: // localhost: 8080 / context / products , где /context - это путь развертывания контекста webapp, а /products - шаблон URL сервлета. Если у вас есть какой-либо HTML

внутри него, просто поставьте POST на текущий URL-адрес, например , и добавьте doPost() к тому же самому сервлету для выполнения задания постобработки , Продолжите приведенные ниже ссылки для более конкретных примеров.

См. Также

2
задан Nisarg 2 March 2019 в 06:28
поделиться

2 ответа

В соответствии со спецификацией , элемент <select> считается read-only, поскольку он не может быть явно отредактирован пользователем.

Псевдокласс : read-write должен соответствовать любому элементу, попадающему в одну из следующих категорий, которые, таким образом, для целей селекторов считаются изменяемыми пользователем: [SELECTORS]

]
  • входные элементы, к которым применяется атрибут readonly, и которые являются изменяемыми (т. Е. Для которых не указан атрибут readonly и которые не отключены)
  • [1120 ] элементы textarea , которые не имеют атрибута «только для чтения» и которые не отключены
  • элементы , которые редактируют хосты или редактируются и не являются ни элементами ввода, ни элементами textarea
  • [ 1123]

    Псевдокласс : только для чтения должен соответствовать всем другим элементам HTML.

    Вместо этого следует использовать атрибут disabled, чтобы указать, что пользователь не может взаимодействовать с элементом <select>. С атрибутом disabled вам не нужно указывать дополнительный CSS, чтобы отключить взаимодействие мыши с элементом.

    Вот как это будет работать:

    <p> ACCEPTED </p>
    <select disabled>
      <option>1</option>
      <option>2</option>
      <option>3</option>
    </select>
    <br>
    <p> UNACCEPTED : selector also applying here </p>
    <select>
      <option>1</option>
      <option>2</option>
      <option>3</option>
    </select>

0
ответ дан Nisarg 2 March 2019 в 06:28
поделиться

Вам необходимо назначить уникальный идентификатор, такой как class или id, чтобы конкретно сделать первый тег выбора readonly, а не оба ... например, здесь я использую тег и селектор атрибута для выбора теги с атрибутом readonly

select[readonly]:-moz-read-only {
  /* For Firefox */
  pointer-events: none;
}

select[readonly]:read-only {
  pointer-events: none;
}
<p> ACCEPTED </p>
<select readonly>
  <option>1</option>
  <option>2</option>
  <option>3</option>
</select>
<br>
<p> UNACCEPTED : selector also applying here </p>
<select>
  <option>1</option>
  <option>2</option>
  <option>3</option>
</select>

Используемый вами селектор является селектором тегов и будет выбирать любой тег select и включите его только для чтения.


Добавление некоторых деталей на основе комментариев,

Вы можете отключить фокус вкладки, используя атрибут tabindex со значением, установленным в false в теге select

[ 1117] Кроме того, вы не должны полагаться на данные, передаваемые со стороны клиента, если они предназначены только для чтения. В бэкэнде должна быть соответствующая проверка, которая не позволит пользователю передавать ложные или вредоносные данные. Независимо от того, что вы используете, простое HTML-решение CSS, как описано выше, или отключение ключей с помощью JavaScript, вы не можете запретить пользователю не изменять значение тега.

0
ответ дан Mr. Alien 2 March 2019 в 06:28
поделиться